多线程-CountDownLatch,CyclicBarrier,Semaphore

1.CountDownLatch

代码如下:

public class CountDownLatchDemo {

    public static void main(String[ ]args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6);
       for(int i= 0; i<6; i++) {
           new Thread(() -> {
               System.out.println(Thread.currentThread().getName() +"号同学离开了教室---");
               countDownLatch.countDown();
           },String.valueOf(i)).start();
       }
        countDownLatch.await();
       System.out.println(Thread.currentThread().getName()+ " 班长开始锁门了---");
    }
}

多线程-CountDownLatch,CyclicBarrier,Semaphore

 

 


 

2.CyclicBarrier

public class CyclicBarrierDemo {

    private static final Integer NUMBER= 7;

    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(NUMBER,() -> {
            System.out.println("集齐7颗龙珠召唤神龙!");
        });

        for(int i =1; i<=7; i++) {
            new Thread(() -> {
                try {
                    System.out.println(Thread.currentThread().getName() +" 颗龙珠被收集到了");
                    cyclicBarrier.await();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }
    }
}

多线程-CountDownLatch,CyclicBarrier,Semaphore

 

 


 

3.Semaphore

public class SemaphoreDemo {
    private static final Integer Number = 3;

    public static void main(String[ ]args)  {

        Semaphore semaphore = new Semaphore(Number);
        //模拟6辆汽车抢3个停车位
        for(int i = 1; i<= 6; i++ ) {
            new Thread(() -> {
                try {

                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName() +" 号车抢到停车位!");
                    TimeUnit.SECONDS.sleep(new Random().nextInt(5));
                    System.out.println(Thread.currentThread().getName() +" -----号车离开了停车位");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    semaphore.release();
                }
            },String.valueOf(i)).start();

        }
    }
}

多线程-CountDownLatch,CyclicBarrier,Semaphore

 

上一篇:Java多线程资源共享


下一篇:连接MySQL出现 2059 - authentication plugin ‘caching_sha2_password’ -navicat 解决方式