原子性
原子性:一系列操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分隔的
比如i++
操作其实就是:取出i的值,加1,赋回来i的值,这是三步操作,不是原子性的,可使用synchronized
实现原子行
原子性操作
- 除long和double之外的基本类型赋值操作都是原子操作
- 所有引用类型的赋值操作都是原子操作,无论是32位还是64位机器
java.concurrent.Atomic.*
包中的所有类都是原子类
long和double的原子性
由于long和double是64位的值,所以在32位机器上会被视为两次单独的写入,每次写32位;64为位的JVM上是原子的
- Oracle官方鼓励JVM在实现时,避免拆分64位值
- Oracle官方鼓励程序员将其使用volatile修饰或进行同步,以防止JVM在实现时为实现上述内容
原子操作的组合
以下操作并不能一定保证线程安全
synchronized (this){
//...
}
synchronized (this){
//...
}
需要再套一个,来保证线程安全
synchronized (this){
synchronized (this){
//...
}
synchronized (this){
//...
}
}
Comments NOTHING