Java并发编程-线程安全与同步
1、对象的状态是指存储在状态变量(实例变量,静态变量)中的数据
一个无状态的对象一定是线程安全的。
2、线程同步:原子性:
1)特征:对于一个程序或一段操作,要么全部执行,要么全不执行。
2)实现:JAVA中通过"加锁机制"来保证程序执行的原子性。
3、JAVA内置锁:同步代码块
1)synchronized(XXX.class):当一个线程进入该同步块后,其他线程不能访问该类的任何方法
2)synchronized(this):当一个线程进入该同步块后,其他线程不能访问该对象的任何方法
3)synchronized method():当一个线程进入该同步方法后,其他线程不能访问该类的此同步方法
4)synchronized(实例变量):当一个线程进入该同步块后,其他线程不能再进入此同步块内,也不可进入其他方法中有这种同步模式的同步块中
在使用同步代码块实现某个同步策略时,要合理的选择同步代码块的范围。
4、线程同步:内存可见性
1)特征:当一个线程修改了对象状态以后,其他线程能够看到该对象发上的状态变化。
2)实现:[align=left][/align]i.Java可以通过"加锁机制"确保其可见性(也就是对于对象的状态变量所做的操作加锁)
ii.使用volatile变量确保可见性。(通过volatile修饰对象的状态变量)
5、线程同步:不变性
1)特征:
2)实现:通过使用不变对象来保证线程同步的安全性
i.不变对象:它只有一种状态,而且该状态由构造函数来控制。不变对象一定是线程安全的。
ii.不可变对象特征:1.对象创建以后其状态不能修改。2、对象的所有域都是final类型。3、对象是正确创建的。