1、sleep()方法会将当前线程挂起,等时间过去之后,继续执行。挂起阶段,其它线程可以占用CPU资源,执行其它的线程。
从上面的图片中可以看出,线程0在sleep(1)的1毫秒时,其它线程(线程1)可以继续占用CPU资源,执行。CPU资源不会因为sleep()被阻塞。
那其实的this对象,thread1的this就是thread1对象,thread2的this就是thread2对象。
问1:那如果我把synchronized(this)注释去了,在线程0暂停时会释放CPU资源么?
会的。因为this同步锁,锁的不是一个对象。
问2:如果我只把线程1或者线程0的锁注释去了,在线程0暂停时会释放CPU资源么?
会的。因为这是他们其中一个根本都没对同一个对象加锁,两个线程就没有什么同步的关系。
所以,我们应该同时去除线程0和线程1的注释,并对同一个对象加锁,比如当前类。这样才能保证两个线程同步。