当前位置:编程学习 > JAVA >>

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

Test类:
[java] 
/* (程序头部注释开始)   
 * 程序的版权和版本声明部分   
 * 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类:
[java] 
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类:
[java]
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类:
[java] 
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("产生的随机数数为&quo

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,