ClassA里有这样的代码段a:
synchronized(this){
if(count == 0){
wait();
}}有一个publice方法为addCount().然后ClassA的一个实例是 AInstance,
我想问下,在线程X在count == 0的条件下执行了代码段a之后,整个ClassA都被同步锁锁定了。那么在线程Y中调用AInstance.addCount()应该不能执行才对啊,可是程度为什么还是会执行呢?难道同步锁只能锁同一个线程里的,对不同的线程没有同步锁锁定的功能???这不合理吧?
synchronized(this){
if(count == 0){
wait();
}}有一个publice方法为addCount().然后ClassA的一个实例是 AInstance,
我想问下,在线程X在count == 0的条件下执行了代码段a之后,整个ClassA都被同步锁锁定了。那么在线程Y中调用AInstance.addCount()应该不能执行才对啊,可是程度为什么还是会执行呢?难道同步锁只能锁同一个线程里的,对不同的线程没有同步锁锁定的功能???这不合理吧?
只锁带synchronized,是的。我需要请教大家的是:
synchronized(this){}锁定的是this吧???
然后我就想既然是this就是整个ClassA啊,所以也就不能执行ClassA中的方法addCount()。要不,synchronized锁的内容到底是什么呢??
比如:若线程X不是执行的是wait(),而是sleep(),那就惨了,这时线程Y不可能去执行同一个对象this上的另一个synchronized方法addCount()。
云上飞翔的意思是:
wait()可以让线程X释放对象的锁,所以可以让线程Y继续对该this对象上进行操作。
而sleep()是不释放对象锁的,线程Y无法对该this对象进行操作。是吗?????
这是wait()和sleep()的差别吗?
我不知道这样说你能不能理解?synchronized是一种共享约定,只有遵循这个约定的才可以做到同步,
打个比方:只有剃度出家的和尚才要戒酒,而俗人是不受这个约定的。
所以,并不是说你锁定了少林寺,就不允许所有到少林寺的人吃肉喝酒了。