为什么需要同步?
多个线程同时访问一个对象时,可能会同时出现读写这个对象,那么这个对象的状态就会混乱,从而出现异常。
synchronized关键字
可以用于修饰代码块和方法,让修饰的代码可以同时运行
使用同步锁
Lock的系列子类等常见锁,悲观锁的形式保证同步,具体锁的种类可以查看我另一篇文章java锁的分类(简单概括版)
线程通信
不同线程间可以通过通信以保证同步,具体方法请看我的另一篇文章多线程的通信
Volatile关键字
可以修饰成员变量,用于保证变量在不同线程进行操作时都可见,即修改立刻生效(默认不加关键字时,变量会先加入工作内存中等待加入主内存),但不能保证原子性。
因为不能保证原子性,synchronized则可以,所以volatile的应用范围较小,常用于状态标记变量或与synchronized同时使用。
本人学习记录使用,欢迎留言互相学习交流。2018年12月29日13:12:30