前言
《Java多线程编程核心技术》这本书例子太多,基本占一半的篇幅都是例子代码,真正的干货比较少,记录几点新知识。
synchronized
和volatile
关键词区别
- 关键词
volatile
是线程同步的轻量级实现,性能好,volatile
只能修饰变量,而synchronized
可以修饰方法以及代码块。 - 多线程访问
volatile
不会发生阻塞,而synchronized
会出现阻塞; volatile
能保证数据的可见性,但不能保证原子性;而synchronized
可以保证原子性,也保证可见性。volatile
解决的是变量在多个线程之间的可见性,而synchronized
解决的是多个线程访问资源的同步性。- https://www.ibm.com/developerworks/cn/java/j-jtp06197.html
线程间通信
wait使线程停止运行,而notify使停止的线程继续运行。
ReentrantReadWriteLock
类
读写锁。
ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
lock.readLock().lock();
lock.readLock().unlock();