zoukankan      html  css  js  c++  java
  • 【Java/CountDownLatch】使用CountDownLatch实现睡眠排序

    刚才在 https://news.cnblogs.com/n/703437/ 上看到有人提到有趣的“睡眠排序”,忽然想到CountDownLatch正好可以用于实现一个。代码如下:

    package ufo.sleepsort;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    
    class SleepThread extends Thread{
        private int seconds;
        private List<Integer> ls;
        private CountDownLatch latch;
        
        public SleepThread(int seconds,List<Integer> ls,CountDownLatch latch) {
            this.seconds=seconds;
            this.ls=ls;
            this.latch=latch;
        }
        
        public void run() {
            try {
                Thread.sleep(seconds*1000);
                ls.add(seconds);
                latch.countDown();
            }catch(Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    public class SleepSortor {
        public static void main(String[] args) throws Exception{
            int[] arr= {2,4,6,13,1,5,7};
            final CountDownLatch latch=new CountDownLatch(arr.length);
            
            List<Integer> ls=new ArrayList<>();
            
            for(int it:arr) {
                SleepThread st=new SleepThread(it,ls,latch);
                st.start();
            }
            
            latch.await();
            
            //排序结束
            for(int i:ls) {
                System.out.println(i);
            }
        }
    }

    输出:

    1
    2
    4
    5
    6
    7
    13

    正如预期。

    有兴趣的朋友可以参照着试一试。

    END

  • 相关阅读:
    java学习笔记
    androd Sdk manager配置
    50ms延时程序
    89c51中断入口地址表
    打印杨辉三角--队列的应用
    栈的应用--括号匹配
    哈夫曼编码---数据压缩
    PS转手绘
    数据结构学习思路
    第三届蓝桥杯省赛---第39级台阶
  • 原文地址:https://www.cnblogs.com/heyang78/p/15376461.html
Copyright © 2011-2022 走看看