首页 > 其他 > 详细

countdownlatch和semaphore

时间:2020-06-11 23:51:29      阅读:49      评论:0      收藏:0      [点我收藏+]

CountDownLatch:

CountDownLatch允许一个或多个线程等待其他线程完成操作;

CountDownLatch需要指定一个整数值,此值是线程将要等待的操作数,当减为0时,才会唤醒所有await的线程,一个countdownlatch只能用一次

public class CountDown1 {
static CountDownLatch c=new CountDownLatch(3);

public static void main(String[] args) throws InterruptedException {
new Thread(()->{
try{
System.out.println("我在干活");
c.countDown();//干完就减1
}catch (Exception e){
e.printStackTrace();
}
}).start();


new Thread(()->{
try{
System.out.println("我在干活1");
c.countDown();//干完就减1
}catch (Exception e){
e.printStackTrace();
}
}).start();
new Thread(()->{
try{
System.out.println("我在干活2");
c.countDown();//干完就减1
}catch (Exception e){
e.printStackTrace();
}
}).start();
c.await();//当C减为0时,才执行此条之后的代码 countdown的缺点是只能用一次,减为0之后就不能用了
System.out.println("结束");
}
}
//Semaphore控制只有多少线程同时访问一个资源,可以用来做限流
public class Semaphore01 {
    static Semaphore semaphore = new Semaphore(5);
public static void main(String[] args) {
for(int i=0;i<20;i++){
final int j=i;
new Thread(()->{
try{
action(j);
}catch (Exception e){
e.printStackTrace();
}
}).start();
}
}
public static void action(int j) throws InterruptedException {
//每次只允许5个线程同时执行下面的代码块
semaphore.acquire();
System.out.println(j+"在京东秒杀");
try{
Thread.sleep(3000);
}catch (Exception e){
e.printStackTrace();
}
System.out.println(j+"秒杀成功");
semaphore.release();
}
}

countdownlatch和semaphore

原文:https://www.cnblogs.com/zpp1234/p/13096561.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!