网易java进阶_Java高级进阶多线程学习之路(九)JUC类的介绍及demo

学习线程肯定要了解JUC(java.util.concurrent),那我们来了解他里面的一些能用到的类吧,最常用到的Thread我们就不说了,大家应该都了解,主要讲一些能用到,但不常用的。主要就是讲讲之前没写到的一些,哈哈。

1da8248fafde840b42838ddcdb5714a0.png

首先是CountDownLatch,这个使用到的比较多,就类似于一个门上面我上了好多把锁,你只有把所有的锁都打开才能进门去。看上面的代码每个线程执行完,执行一下countDown方法,就相当于减一,直到减到0,然后await方法就是等着他减到0才往后面走,所以这里并不是说一个线程只能countdown一次。只要减到0 他都会往后面走。只要把锁都打开了,那就能进门去,不在乎是谁开的锁,开了几把锁。

d9ae205fd342fc0d44272dfe9e828ff5.png

cyclicBarrier这个类大家可能有些陌生,翻译过来就是循环栅栏,可以设定一个数量,当线程数量达到这个数量后才会运行,数量不够就会等着,至于等多久,可能是天荒地老吧。想了解的可以自己去找资料看看。

493cbd8d9a62f6da68661e6c73d8e938.png

phaser是分阶段执行,就是有的线程执行第一个阶段,有些线程执行第二个阶段,在写遗传算法的时候可能会用到他。这个可能不是太好理解,直接看demo吧

493cbd8d9a62f6da68661e6c73d8e938.png

b5294f3ab60f3f6fc458e2b3d4dd50ac.png

10cdfe404916e12da8281d28c0e3c7cd.png

看图就是先定义了人在婚礼上要做的事,然后重写了阶段的方法,定义那些阶段,最后8个客人来参加婚礼,bulkRegister注册有多少人要来,arriveAndDeregister就是解除了注册。arriveAndAwaitAdvance就是我做完事了,要等着别人,等到都做完了再一起去下个阶段,不多讲了,这个用到的不多,即使去面试也不会有人问的。

33707a2bccd48aeceaba810be0b5e891.png

下面的划重点,要考的。ReadWriteLock读写锁,这个大家都很熟悉吧,这也可以叫共享锁和排它锁,读锁是共享锁,写锁是排他锁。读锁允许其他读的操作一起来,但是写的操作不允许。

这里的demo简单模拟了18个读操作和2个写操作,执行结果就是读操作几乎一起完成,而写的操作是一个一个来的。这也是为了保证数据一致性。读锁则是为了提高效率,在秒杀的时候读写锁的作用就可以体现出来

85b51b0f7369f32abcfb566d9901800a.png

semaphore直译过来是信号灯,我的理解呢就是大家要听他指挥,他可以控制有多少线程可以一起执行,acquire方法就是获取到了批准,可以执行,执行完了之后要调用release方法给他还回去,让其他线程使用。相信聪明的大家知道了已经知道了他的应用场景,限流可能是个不错的选择。

8faacaede4d249678ea1a31577ba6b59.png

exchanger是交换器,可以交换两个线程里的数据。这个用到的很少,就是两个线程阻塞然后交换数据这么个过程,你可以把exchanger 当成一个容器,两个线程分别把数据交给他来交换数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值