• 多线程-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()+ " 班长开始锁门了---");
        }
    }


    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();
            }
        }
    }


    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();
    
            }
        }
    }

  • 相关阅读:
    peudoclass与pseudo的相同点与不同点
    第一个页面
    自我介绍
    Virtual IP Address 学习记录
    OpenStack 学习记录
    Dubbo学习记录 MAC
    售前 银行
    log4j2 学习记录 Pattern Layout
    Zookeeper学习记录 mac下安装部署
    P2695 骑士的工作
  • 原文地址:https://www.cnblogs.com/liuyi13535496566/p/15026797.html
Copyright © 2020-2023  润新知