• 常用的辅助类(必会


    CountDownLatch
    public class CountDownLatchDemo {
        //原理:
        //countDownLatch.countDown(); // 数量-1
        //countDownLatch.await(); // 等待计数器归零,然后再向下执行
        //每次有线程调用 countDown() 数量-1,假设计数器变为0,countDownLatch.await() 就会被唤醒,继续 执行!
    
        public static void main(String[] args) throws InterruptedException {
            //总数是6,必须要执行任务的时候,再使用
    
            CountDownLatch count = new CountDownLatch(6);
    
            for (int i = 0; i <=6; i++) {
                new Thread(()->{
                    System.out.println(Thread.currentThread().getName()+"Go out");
                    count.countDown();//数量减一
                    },String.valueOf(i)).start();
            }
    
            count.await();//等待计数器归0,然后再向下执行
            System.out.println("Close Door");
    //        count.countDown();
        }
    }
    CyclicBarrier
     1 public class CyclicBarrierDemo {
     2     public static void main(String[] args) {
     3         //如果设置的数比循环里面的数大,循环里面的不满足就会卡在barrier.await();等待这里
     4         CyclicBarrier barrier = new CyclicBarrier(9,()->{
     5             System.out.println("召唤神龙耶");
     6         });
     7 
     8 
     9         for (int i = 0; i <=7; i++) {
    10             int temp = i;
    11             //lambda能操作  i 吗
    12             new Thread(()->{
    13                 System.out.println(Thread.currentThread().getName()+"收集"+temp+"个龙珠");
    14                 try {
    15                     barrier.await();
    16                 } catch (InterruptedException e) {
    17                     e.printStackTrace();
    18                 } catch (BrokenBarrierException e) {
    19                     e.printStackTrace();
    20                 }
    21             }).start();
    22         }
    23     }
    24 }
    Semaphore
     1 public class SemahoreDome {
     2     public static void main(String[] args) {
     3         //线程数量,停车位  限流会用到
     4 
     5         Semaphore semaphore = new Semaphore(3);
     6 
     7         for (int i = 0; i <=6; i++) {
     8             new Thread(()->{
     9                 //acquire()得到
    10                 try {
    11                     semaphore.acquire();
    12                     System.out.println(Thread.currentThread().getName()+"得到 车位");
    13                     TimeUnit.SECONDS.sleep(2);
    14                     System.out.println(Thread.currentThread().getName()+"离开停车场");
    15                 } catch (InterruptedException e) {
    16                     e.printStackTrace();
    17                 }finally {
    18                     semaphore.release();//release() 释放
    19                 }
    20             },String.valueOf(i)).start();
    21         }
    22 
    23     }
    24 }
     



  • 相关阅读:
    mac单机 k8s minikube ELK yaml 详细配置 踩坑
    springboot es 配置, ElasticsearchRepository接口使用
    Docker 搭建 ELK 日志记录
    空杯心态
    与友人谈
    mac单机, jenkins-master在集群k8s外, k8s内部署动态jenkins-slave, jnlp方式. 踩坑+吐血详细总结
    Anyproxy 代理前端请求并mock返回 二次开发 持续集成
    Oracle 设置TO_DATE('13-OCT-20', 'dd-MON-yy'), 报错 ORA-01843: 无效的月份
    allure-java 二次开发 添加自定义注解, 并修改@step相关aop问题
    Appium添加Listener运行报错
  • 原文地址:https://www.cnblogs.com/rzkwz/p/12696947.html
Copyright © 2020-2023  润新知