目录
1. 概述
如何实现并发的正确性,如何实现高效性
2. 线程安全
2.1 Java中的线程安全
按照安全程度由强到弱:
- 不可变
不可变的对象一定线程安全。
例如:String、枚举类型、java.lang.Number 的部分之类等
- 绝对线程安全
达到“不管运行时环境如何,调用者带哦用不需要任何额外的同步操作”。
达到上述要求需要的代价很大甚至不切实际。
- 相对线程安全
我们通常意义上所讲的线程安全。,需要保证这个多项单独的线程操作是安全的,我们在调用是不要用做额外的保障措施。
Vector、HashTable等
- 线程兼容
本身不是线程安全的,通过在调用段正确使用同步手段来保证对象在不能够发环境中能够安全使用。
通常所说的线程不安全
- 线程对立
无论调用段采取怎样的同步措施,都无法在多线程环境下并发使用的代码。
如Thread 类的suspend() 和resume()
2.2 线程安全的实现方法
- 互斥同步(阻塞同步)
互斥是方法,同步是牧师
synchronized 关键字:
<> 编译后在同步快前后分别形成monitorenter 和monitorexit这两个字节码指令,每一个都需要一个reference 类型的参数来表明要锁定和解锁的对象。