第十四讲
Semaphore实现信号灯
Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以同时访问资源的线程个数,例如,实现一个文件允许的并发访问数
东西很容易学会,重要的是遇到问题想起用这个东西解决
final Semaphore op = new Semaphore();
op.acquire();
op.availablePermits();
多个互斥,厕所有5个坑。。来了10个人。
单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了锁,再由另一个线程释放锁,这可应用于死锁恢复的一些场合
第十五讲
其他同步工具类
CyclicBarrier
表示大家彼此等待,大家结合好后才开始出发,分散活动后又在指定地点集合碰面。这就好比整个公司人员利用周末时间集合郊游一样,先各自从家出发到公园集合后,再同时出发到公园游玩,在指定地点集合后同时开始就餐
第十六讲
CountDownLatch
犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数器到达0时,则所有等待者或单个等待者开始执行。
模拟百米赛跑, 运动员等待裁判吹口哨,接到命令后运动员跑,所有运动员都跑完了,裁判员开始报成绩
一个人线程通知多个线程,或者多个线程通知一个线程
第十七讲
Exchanger
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿到数据到来时,才能彼此交换数据
第十八讲
可阻塞的队列
队列包含固定长度的队列和不固定长度的队列
什么是可阻塞队列,阻塞队列的作用与实际应用,阻塞队列的实现原理
ArrayBlockingQueue(jdk中已经提供)
注意三个添加方法的区别–》查API文档
阻塞队列,实现同步通知的功能,单元格只有一个(用两个队列)
匿名构造方法,如下没有方法名字(任一构造方法调用之前执行)
{
}
第19讲
java5 中的同步集合
传统的集合在多个线程访问时会有问题(HashSet、HashMap、ArrayList)
写程序得有线程安全的概念
以前没用同步集合的实现时–》实现方式
Collections.synchronizedMap(Map<K, V> n)相当于一种代理方式
说HashSet和HashMap的区别和联系, HashSet的内部实现就是用的HashMap的key
java5以前的集合类还有另外一个隐患:
操作集合(改数据的地方)会修改版本号
在迭代集合时,不能同时对集合修改(ArrayList)
解决这个问题
Collect users = new CopyonWriteArrayList();
转载请注明:学时网 » 张孝祥老师-java并发编程听课笔记(五)