3.Concurrent.util工具类

本文深入探讨了Java并发编程中常用的工具类,包括CountDownLatch、CyclicBarrier、Future模式、Callable接口和Semaphore信号量。通过这些工具类,开发者可以有效管理多线程间的同步问题,提升程序的并发性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Concurrent.util工具类

    CountDownLacth:监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作
                    CountDownLatch countDown = new CountDownLatch(2);两次
                    countDown.await()当前线程等待,直到其他线程或当前线程
                    进行两次countDown.countDown(),则该线程则继续执行
                    
                    当完成了某种条件才继续执行
                    
    CyclicBarrier:当每个线程都准备好才执行(执行自己的线程),只要有一个没有准备好,则全部等待
                    CyclicBarrier barrier = new CyclicBarrier(3);//程序线程中必须有3次barrier.await()
                    ExecutorService executor = Executors.newFixedThreadPool(3);
                    executor.submit(new Thread(...))
                    executor.submit(new Thread(...))
                    executor.submit(new Thread(...))
                    executor.shutdown()
                    
                    当所有线程都await()时,才全部执行每一个线程
                    
            区别:CountDownLach一个线程等待,其他的n个线程发出通知,则等待的线程才执行
                  CyclicBarrier所有的线程都参与都阻塞,直到所有线程都调用await时,所有线程才继续执行
    
    Future模式:非常适合在处理很耗时很长的业务逻辑时使用,可以有效的减少系统的响应时间,
                提高系统的吞吐量
                FutureTask<T> future = new FutureTask<T>(new ...())
                ExecutorService executor = Executors.newFixedThreadPool(1)
                Future f = executor.submit(future)//单独启动一个线程去执行的
                
                这里提交任务future,则开启线程执行RealData的call()方法执行
                
                submit和execute的区别: 第一点是submit可以传入实现Callable接口的实例对象,
                                        第二点是submit方法有返回值
    
    Callable: 类实现Callable(implements Callable<T>)接口,重写call方法
                future.get()//调用获取数据方法,如果call()方法没有执行完成,则依然会进行等待
    
    Semaphore: 信号量,非常适合高并发下访问,
                
                PV:page view 网站的总访问量
                UV:unique Visitor访问网站的一台电脑客户端为一个访客
                QPS: query per second 每秒查询数,
                RT:response time 请求访问时间
                
                当然还涉及cpu、内存、网络、磁盘等情况
                
                Semaphore semp = new Semaphore(5)//限制流量策略
                semp.acquire() //获取许可   可以有5个线程并行进入执行,6个线程就有一个阻塞
                semp.relea se() //释放
    
高并发解决方式:
        1,网络
        2,服务(业务,nginx、lvs、haproxy),分流
        3,java代码层面(限制流量策略)使用信号量或redis
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值