A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义

1 个回复

倒序浏览
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class Test3 {
/*
我是这样做的,不知道对不对
* 3,已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
*/
        public static void main(String[] args) {
                int[] arr ={2,4,6,2,1,5};                //定义数组
                bubblesort(arr);                               
                print(arr);                                               
               
                System.out.println("----------排序后交替执行---------");
                final printer p = new printer();//局部内部类使用局部变量用final修饰
                new Thread() {
                        public void run() {
                                while(true) {
                                        try {
                                                p.print1();
                                        } catch (Exception e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();
                new Thread() {
                        public void run() {
                                while(true) {
                                        try {
                                                p.print2();
                                        } catch (Exception e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();
}
        /*
         * 冒泡排序
         * 1,返回值类型void
         * 2,参数列表int[] arr
         */
        public static void bubblesort(int[] arr) {
                for (int i = 0; i < arr.length - 1; i++) {        //外循环只需要比较arr.length - 1
                        for (int j = 0; j < arr.length - 1 - i; j++) {//内循环-1是为了防止索引越界,-i是为了提高效率
                                if(arr[j] < arr[j + 1]) {
                                        int temp = arr[j];
                                        arr[j] = arr[j + 1];
                                        arr[j + 1] = temp;
                                }
                        }
                }
        }
        /*
         * 打印数组
         * 1,返回值类型void
         * 2,参数列表int[] arr
         */
        private static void print(int[] arr) {
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr[i] + " ");
                }
        }
}

class printer {
        private ReentrantLock r = new ReentrantLock();        //私有ReentrantLock多象
        private Condition c1 = r.newCondition();                //创建第一个监听器
        private Condition c2 = r.newCondition();                //创建第二个监听器
       
        private int flag = 1;                                                        //定义一个标记
        public void print1() throws Exception {
                r.lock();                                                                       
                if(flag != 1) {
                        c1.await();
                }
                System.out.println("6 5 4 2 2 1 ");
                System.out.println("\r\n");
                flag = 2;
                c2.signal();
                r.unlock();
        }
        public void print2() throws Exception {
                r.lock();
                if(flag != 2) {
                        c2.await();
                }
                System.out.println("6 5 4 2 2 1 ");
                System.out.println("\r\n");
                flag = 1;
                c1.signal();
                r.unlock();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马