请教关于Java多线程的问题
关于notify和wait我有个小问题想请教各位高手。
如果现在我有一个生产者方法,一个消费者方法,都为同步方法,简单代码如下:
int num = 0;
public synchronized void producer()
{
num++;
notify();
}
public synchronizde void consumer()
{
while(num<=0)
try
{
wait();
}
catch(Exception e){}
num--;
}
当有一个线程调用了consumer()方法以后,并且wait了,该线程会释放对象锁。那其他线程这时候能否竞争调用consumer()方法呢?还是其他线程只能调用producer()方法,只有等上一个wait的线程执行完consumer()方法中的代码以后,才能竞争调用consumer()方法呢?
问题点数:80、回复次数:4Top
1 楼haisenmai(我应该做得到)回复于 2006-07-10 19:15:32 得分 0
tryTop
2 楼antimicro(钻了牛角尖)回复于 2006-07-27 18:59:53 得分 0
gzTop
3 楼crazycy(崔毅,blog:http://www.blogjava.net/crazycy/)回复于 2006-07-27 19:06:24 得分 0
不直接回答lz的问题,只把大概原理说一下,lz自己来考虑:
这里只讨论synchronizde修饰的方法:
如果调用一个对象的synchronizde修饰的方法,那么就不可以再调用这个对象的其它被synchronizde 修饰的方法,这样是对这个对象(类实例)完成了方法级的同步;
但是依然可以调用这个对象的非被synchronizde 修饰的方法
lz是否明白了呢?Top
4 楼trueyellow()回复于 2006-07-27 20:35:09 得分 0
都可以调用。。
另外楼上听说过类锁和对象锁么?
含糊的解释会误导新人。。Top




