1、即有synchronized关键字修饰的方法(所有访问状态变量的方法都必须进行同步),此时充当锁的对象为调用同步方法的对象。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。

3、在开始部分我们讲到内置锁也就是互斥锁的介绍时,线程A获得互斥锁后,线程B阻塞知道线旯皱镢涛程A释放互斥锁,线程B才能获取到同一个互斥锁。但是上面代码中Main线程并没有对Status对象进行同遘抟斟喏步,故在Thread线程锁定Status对象的时候不需要阻塞,可以直接操作Status对象,因此,所有使用同步对象的地方都必须进行同步。 修改方式是把注释掉的代码打开。如果锁对象为静态变量,或使用synchronized关键字修饰静态方法,则锁对象为Class对象。

5、使用重入锁实现线程同步 在Java1.5中新增了以个java.util.concurrent包来婧旱恐笆支持同步。ReentrantLock类是可重入、互斥、实现了Lo艘早祓胂ck接口的锁,它拥有synchronized相同的并发性和内存语义,此外还多了锁投票,定时锁等候和中断锁等候。 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定;如果使用synchronized,如果A不释放,B将一直等下去,不能被中断; 如果使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情。
