首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java线程并发 wait notify notifuAll 请大神授予解答

2013-09-08 
java线程并发waitnotifynotifuAll请大神给予解答package concurrencyimport java.util.concurrent.Execut

java线程并发 wait notify notifuAll 请大神给予解答
package concurrency;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class NotifyVsNotifyAll {

public static void main(String[] args) throws Exception{

ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0; i < 5; i++){
exec.execute(new Task());
}
exec.execute(new Task2());
TimeUnit.SECONDS.sleep(1);
Task.blocker.prod();
System.out.println(" the end of the programs ! ");
}
}
class Blocker{
synchronized void waitingCall(){
try{
while(!Thread.interrupted()){
System.out.println(Thread.currentThread() + " is waiting !!!");
wait();
System.out.println(Thread.currentThread() + "has done!!!");
}
}catch(Exception exp){

}
}
synchronized void prod(){
System.out.println(Thread.currentThread() + " prod() !");
notify();
}
synchronized void prodAll(){
notifyAll();
}
}

class Task implements Runnable{
static Blocker blocker  = new Blocker();
@Override
public void run() {
// TODO Auto-generated method stub
blocker.waitingCall();
}
}

class Task2 implements Runnable{
static Blocker blocker  = new Blocker();
@Override
public void run() {
// TODO Auto-generated method stub
blocker.waitingCall();
}
}

/*output:
Thread[pool-1-thread-1,5,main] is waiting !!!
Thread[pool-1-thread-3,5,main] is waiting !!!
Thread[pool-1-thread-5,5,main] is waiting !!!
Thread[pool-1-thread-2,5,main] is waiting !!!
Thread[pool-1-thread-4,5,main] is waiting !!!
Thread[pool-1-thread-6,5,main] is waiting !!!
Thread[main,5,main] prod() !
 the end of the programs ! 
Thread[pool-1-thread-1,5,main]has done!!!
Thread[pool-1-thread-1,5,main] is waiting !!!
*/


这个是java编程思想上面的一个题目,我改了一下,我就是想请教一下大神,
为何结果是上面那样的,因为Task中的blocker只有一个,那么当一个线程
调用waitingCall()的时候,其他的线程应该就要等待了呀,为什么还会出现
Thread[pool-1-thread-3,5,main] is waiting !!!
Thread[pool-1-thread-5,5,main] is waiting !!!
Thread[pool-1-thread-2,5,main] is waiting !!!


Thread[pool-1-thread-4,5,main] is waiting !!!
这几个输出呢?这不就表示waitingCall在第一个线程执行等待的时候其它的
线程也能够进入到waitingCall中了么?
坐等大神回复,一直在线到10点半~

concurrency java thread
[解决办法]
你能加点代码高亮不???这黑白的东西看着的点费劲。。。。

热点排行
Bad Request.