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

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 stub
		System.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


 

 

运行结果:

 

你可能感兴趣的:(Java语言学习)