java并发知识点
一、最常用的同步工具
1.synchronized是Java中的关键字,是一种同步锁。可以修饰一段代码,一个方法...这个不展开了,初级使用。
我的理解:一个对象或者类天然有一个锁,用法:synchronized(某个对象)。这个对象也许是自己this,也可以是其它对象:private
byte[] lock = new byte[0];据说这个开销比较少。有时候标识在方法前面的方法,可以理解为使用this的锁。
这个锁的锁定与释放都由系统控制,不用自己管理。这具锁对象有wait、notify 和
notifyAll方法,用于线程之间的通讯。常用于代码结构如:for(;;){如果不满足条件就等,如果满足就执行,并通知其它等待的线程},这里注重留意一下interrupt概念,要求中断与可被中断以及中断后执行什么。暂时不展开,回头补充一下。
最好记住一个例子,比如《thinking in java》中的一个厨师放入空盘子与顾客拿走食物的这个例子。
后面开始是复杂的并发包中的内容。
二、并发包中常用的高级工具
2.ReentrantLock是java.util.concurrent包中的,拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性能。lock后必须在finally块中释放。
3.ReentrantLock与条件的配合使用
要记住这个例子,一个篮子可以放苹果,可以有多个线程生产苹果,多个线程拿走苹果。篮子对象有个容量,而且有一个锁与两个条件。生产线程放的时候调用篮子的put方法,如果篮子满了就等待,如果不满就放个苹果,同时通知等待在【空了条件】上的拿苹果的线程可以拿了,也许通知的时候,拿苹果的线程没有等待,而是正常运行着。