跳至主要內容
CountDownLatch的使用

实现一个容器,提供get和size两个方法,些两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数大于5时,线程2给出提示并结束

接着这个问题,上一篇笔记的实现方法是用synchronized、wait和notify实现的,这种实现方式比较重,当不涉及同步,只是涉及线程通信的时候,那有没有更好的实现方法呢?(这不是废话吗)

CountDownLatch

CountDownLatch是一个非常实用的多线程控制的工具。常用的几个方法:

//实例化一个倒数器,count是指定计数个数
CountDownLatch(int count)
// 当count不等于0时,一直阻塞
void await()
// count - 1  操作
void countDown()

DHB大约 1 分钟Java线程
对synchroized的一些认识

synchroized块可以保证块中的代码在同一时刻只能让一个线程访问,其他尝试进入代码块的线程都会被阻塞,直到代码块中的线程执行完。

synchroized可以修饰以下不同的块

  • 实例方法
  • 静态方法
  • 实例方法中的代码块
  • 静态方法中的代码块

synchroized关键字修饰实例方法和实例对象时,锁住的是对象,而修饰静态方法和静态方法中的代码块时,锁住的是该类的类对象。

synchroized支持重入,并具有继承性,具体表现形式有两种:


DHB小于 1 分钟Java
Java Synchronised机制

Java中锁的控制可以参看这篇文章: Java多线程抢占

I. 原末

矛盾1

A: 重量级锁中的阻塞(挂起线程/恢复线程): 需要转入内核态中完成,有很大的性能影响。


DHB大约 5 分钟Java原理