0
点赞
收藏
分享

微信扫一扫

实现一个简单的 CountDownLatch Demo

杨沐涵 2022-12-22 阅读 185


现在很多框架或者中间件由于多次迭代、优化和兼容、扩展处理,最核心的设计思想和原理很容易就被覆盖,导致我们想学习的时候就不太容易抓住主干。

先不看各种原理,就基与 ​​CountDownLatch​​​ 提供的功能使用最简单的方式去实现 ​​CountDownLatch​​:

package dongguabai.concurrent;

/**
* @author Dongguabai
* @description
* @date 2022-04-25 12:38
*/
public class MyCountDownLatch {

private volatile int count;

public MyCountDownLatch(int count) {
this.count = count;
}

public synchronized void countDown() {
count--;
}

public void await() {
while (count > 0) {
}
}

public static void main(String[] args) {
//CountDownLatch cl
}
}

使用​​JUC之AQS之CountDownLatch​​中的例子测试一下:

package dongguabai.concurrent;

import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
* @author Dongguabai
* @date 2018/9/24 11:46
*/
public class CountDownLaunthDemo implements Runnable{

static int count = 10;

static MyCountDownLatch end = new MyCountDownLatch(count);
static CountDownLaunthDemo demo = new CountDownLaunthDemo();

@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(10)*1000);
System.out.println("check complete");
end.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws InterruptedException {
ExecutorService exec = Executors.newFixedThreadPool(count);
for (int i = 0; i < count; i++) {
exec.submit(demo);
}
end.await();
System.out.println("-------------Fire");
exec.shutdownNow();
}
}

输出:

check complete
check complete
check complete
check complete
check complete
check complete
check complete
check complete
check complete
check complete
-------------Fire

References

  • javascript:void(0)


举报

相关推荐

0 条评论