您好,我想请问下为什么分别对count跟iObject进行synchronized会出现两种不同的情况?
请问下这两种情况出现的原因是啥?
请问下这两种情况出现的原因是啥?
2015-02-10
这个是这样子!首先第二种情况,采用Object对象作为同步对象是正确的,但是你把synchronized(iObject)放在了while循环外面,我们知道synchronized方法或者块内的操作是原子的,不会被其他线程打断,只有它自己退出了synchronized方法活这块,其它线程才可以占用到CPU资源,所以一旦某个线程进入到了synchronized块内后,这个线程就会一直执行到while循环结束,这时候由于你的是第二个线程首先进入了synchronized,也就是首先持有了互斥锁,因此打印出了你截图的结果,而线程2退出synchronized块后,也就是锁释放后,count的值已经变为了0,因此这是其它线程抢占到CPU资源,进入synchronized块,也没有代码可执行了!你可以synchronized块里面,但是while循环后面打印出来一句话看下结果,就一目了然了!另外,如果把synchronized块whle循环里面,只同步住count--和所拥有system.out.println.......这两家代码,就会看到可能是三个线程的信息都会打印出来!
举报