首页 > 其他分享 >三种常用的辅助工具类

三种常用的辅助工具类

时间:2022-10-20 23:24:52浏览次数:43  
标签:常用 String System 线程 辅助工具 println 三种 public out

三种常用的辅助工具类

CountDownLatch

image-20220417090606886

  • 是一个执行减法操作的辅助计数器
//计数器
public class CountDownLatchTest {
    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(); //执行-1操作
            },String.valueOf(i)).start();
        }
        countDownLatch.await();//等待计数器归零,再执行向下操作
        System.out.println("关门");
    }
}

CyclicBarrier

image-20220417091441246

//加法计数器
public class CyclicBarrierTest {
    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(6,()->{
            System.out.println("线程执行完毕");
        });
        for (int i = 0; i <=6 ; i++) {
            final  int temp=i;
            new Thread(()->{ //lambda表达式不能直接获取for循环中的变量,需要通过final类型转换
                System.out.println(Thread.currentThread().getName()+"线程执行了"+temp);
                try {
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }
    }
}

Semaphore

image-20220417092652705

//运行许可
public class SemaphoreTest {
    public static void main(String[] args) {
        //线程数量:抽象的看成停车位
        Semaphore semaphore = new Semaphore(3); //相当于存在三个停车位
        for (int i = 0; i <=6 ; i++) {
            new Thread(()->{
                try {
                    semaphore.acquire();//获得,假设线程已满,会等待其他线程被释放为止
                    System.out.println(Thread.currentThread().getName()+"抢到了车位");
                    TimeUnit.SECONDS.sleep(2);//线程休眠两秒
                    System.out.println(Thread.currentThread().getName()+"离开了车位");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally{
                    semaphore.release(); //释放线程,会将当前的释放量+1,然后唤醒等待
                }
            },String.valueOf(i)).start();
        }
    }
}

作用:

  • 多个共享资源互斥使用
  • 并发限流,控制最大线程数

标签:常用,String,System,线程,辅助工具,println,三种,public,out
From: https://www.cnblogs.com/wfy-studying/p/16811740.html

相关文章

  • Linux的三种网络连接方式
    Linux的三种网络连接方式1.桥接模式虚拟系统可以和外部系统通讯,但是容易造成IP冲突2.NAT模式网络地址转换模式,虚拟系统可以和外部通讯,不造成IP冲突3.主机模式独立的......
  • HTML常用标签
    HTML常用标签<!DOCTYPEhtml><!--html文件开始--><htmllang="en"><!--head文件头--><head><metacharset="UTF-8"><title>这是第一个网页</title></hea......
  • 常用内置模块
    os与sys模块这两个模块的作用类似但有不同,os模块主要是对运行文件所在的操作系统进行操作,而sys模块只对python解释器内文件进行操作os模块os模块主要与代码运行所......
  • git常用命令
    <p>初始化:在项目目录里边gitinit添加到缓存区:gitaddfilename提交到本地仓库:gitcommit-m"说明"查看提交记录:gitlog--pretty=oneline--abbrev-commit能查看到回......
  • 常用内置模块之os、sys、json简介
    昨日内容回顾包的使用包与普通模块的使用相同。导入包实际是导入了包内的双下iter文件,可以使用该文件内的名称。软件开发目录规范启动相关文件夹bin......
  • vue.config.js 常用的属性
    //vue.config.js文件是脚手架的配置文件const{defineConfig}=require("@vue/cli-service");module.exports=defineConfig({transpileDependencies:true,......
  • 三种常见的存储类型
    常见存储分为三种类型:DAS:直连式存储:Direct-AttachedStorage,简称DASSAN:存储区域网络:StorageAreaNetwork,简称SANNAS:网络附加存储:Network-AttachedStorage,简称NA......
  • SQL Server中,Numric,Decimal,Money三种字段类型的区别
     SQLServer中,Numric,Decimal,Money三种字段类型的区别 1,Numric,Decimal,Money三种字段类型,都是精确数据类型;前两个可以自己定义长度和小数位数,Money的定义相当于......
  • conda 常用命令总结
    1、建立新的虚拟环境,设置python版本condacreate--name环境名python=3.82、激活(使用)环境activate环境名3、关闭/退出环境deactive环境名4、当为环境添......
  • 奇迹mu服务端的常用端口及功能​
    奇迹mu服务端的常用端口及功能​我是艾西们今天跟大家聊聊奇迹mu服务端常用的端口以及功能都有哪些,我们在开服时需要注意哪些东西今天跟大家一次说明白!​服务器安全问题就得......