线程间的通讯:
让两个线程共享同一个对象:
critical section:在一些关键状态下,别的线程不能接触数据,这种关键状态下的代码为critical section.
synchronized(object){代码}
object 是关键段的钥匙,this
synchronized起作用: 在java 中,
(1)每一个对象有一把钥匙,钥匙有且仅有一把.
(2)为了执行synchronized块,线程需要得到对象中的钥匙,一旦获得了钥匙,对象就不再拥有钥匙.
(3)当线程要执行synchronized块,钥匙不在对象中,线程就stall了,一直到钥匙被还到对象中,才被这个线程拿到.
(4)当线程还给synchronized块,钥匙就还给了对象.
如何保护数据?
synchronized只是保证同一时刻只有一个线程在运行.
数据私有
所有的访问都同步化(包括读数据)
用数据本身作为钥匙
死锁和饿死
需要两个资源的时候,变成相同的顺序.