java--第14周实验--任务1--.编写多线程程序

来源:互联网 发布:java人机猜拳游戏代码 编辑:程序博客网 时间:2024/05/29 17:46

Test类:

/* (程序头部注释开始)    * 程序的版权和版本声明部分    * Copyright (c) 2011, 烟台大学计算机学院学生     * All rights reserved.    * 文件名称:编写多线程程序。 * 作 者: 雷恒鑫     * 完成日期: 2012 年 11 月 20日    * 版 本 号: V1.0     * 对任务及求解方法的描述部分    * 输入描述:先封装一类对象RandomNumber,功能是先产生一个大于10的随机整数n,再产生n个随机数并存放于数组中。 * 输入描述:然后封装两个线程Thread1(要求是Thread的子类)和Thread2(要求实现Runnable接口) * 输入描述:并发地对所生成的随机数进行排序,其中Thread1要求采用冒泡排序法进行排序,并输出排序结果。 * 输入描述:Thread2要求采用快速排序法进行排序,并输出排序结果。最后编写主线程TestThread,加入上述两个线程实现程序的并发, * 输入描述:比较这两个线程排序的结果。 * 问题描述:    * 程序输出:    * 程序头部的注释结束    */public class Test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("主线程开始");Thread1 thread1 = new Thread1();Thread2 thread2 = new Thread2();Thread t = new Thread(thread2);thread1.start();t.start();thread1.run();}}


Thread1类:

public class Thread1 extends Thread {public void run() {RandomNumber randomNumber = new RandomNumber();randomNumber.array();int[] a = randomNumber.getA();int t = 0;for (int j = 0; j < a.length; j++) {for (int i = 0; i < a.length - 1 - j; i++) {if (a[i + 1] > a[i])// 如果下一个数大于前一个数,交换位置t = a[i];a[i] = a[i + 1];a[i + 1] = t;}}System.out.println("线程1的快速排序算法结果:");for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}}


Thread2

Thread2类:

public class Thread2 implements Runnable {private static void sort(int[] a, int first, int last){int i = first;int j = last;int middle = a[first]; // 第一次调用时候我选取要排序的数组的第一个数作为关键数据while (true) {while (++i < last - 1 && a[i] < middle);while (--j > first && a[j] > middle);if (i >= j) {break;}swap(a, i, j);}a[first] = a[j];a[j] = middle;if (first < j) {sort(a, first, j);}if (i < last) {sort(a, i, last);}}private static void swap(int[] a, int i, int j) {int temp = a[i];a[i] = a[j];a[j] = temp;}public void run() {System.out.println("我是线程2的头");RandomNumber randomNumber = new RandomNumber();randomNumber.array();int[] a = randomNumber.getA();sort(a, 0, a.length);System.out.println("线程2的快速排序算法结果:");for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}}


RandomNumber类:

public class RandomNumber {//功能是先产生一个大于10的随机整数n,再产生n个随机数并存放于数组中。int []a;public int[] getA() {return a;}public void array(){int n=(int)(10+10*Math.random());System.out.println("产生的随机数数为"+n);a = new int[n];for(int i=0;i<n;++i){a[i] = (int)(100*Math.random());System.out.println(a[i]);}}}


 

 

运行结果:

 

原创粉丝点击