【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

 

posted @   逆火狂飙  阅读(74)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2019-10-07 ZT:在mybatis的Mapping文件写入表名 出现异常ORA-00903: 表名无效 的解决
2019-10-07 【Canvas与技法】绘制扇形
2019-10-07 【高中数学/三角函数/基本不等式】若正数a,b满足1/a+1/b=1,则1/(a-1)+9/(b-1)的最小值是?
2013-10-07 【Canvas与图标】压力表图标
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示