问题描述
看了一下午还没弄明白,java里如何唤醒指定线程以下是我编的例子,希望实现在主函数里挂起,唤醒Thread1或者Thread2。暂时不考虑使用while(boolean){wait()}的方法线程代码如下packagecom.JW;classChildThreadimplementsRunnable{Stringm_strThreadName;longm_nTime;ThreadMyThread;ChildThread(StringThreadName,longTime){this.m_strThreadName=ThreadName;this.m_nTime=Time;MyThread=newThread(this,this.m_strThreadName);MyThread.start();}publicvoidrun(){for(inti=0;i<10;i++){System.out.println(m_strThreadName+"Thread:"+i);try{Thread.sleep(m_nTime);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}publicclassTest_Thread{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubChildThreadThread1=newChildThread("ChildThread1",500);ChildThreadThread2=newChildThread("ChildThread2",500);Thread2.MyThread.setPriority(Thread.NORM_PRIORITY+2);while(Thread1.MyThread.isAlive()||Thread2.MyThread.isAlive());System.out.println("MainThread");}}
解决方案
解决方案二:
自己顶,不能沉
解决方案三:
楼主是不想用标志位的方法吗,就是while(booleanflag)这种方法
解决方案四:
根本就没有调用唤醒线程的方法,并且ChildThread中的MyThread看着好奇怪。
解决方案五:
java.util.concurrent.lock包中的lockSupport可以唤醒指定的阻塞线程。有关JUC的介绍见
解决方案六:
lock的方法我也看过,但是编到程序里老是不对,大神,能不能说细致点。我这程序到底怎么改啊
解决方案七:
如果我在run方法里加入if(i==5){wait()}。我如何在主线程唤醒指定的Thread1或者Thread2?
解决方案八:
1、sleep中的线程,除非到了时间,不然无法人为去唤醒,所以楼主不要在这方面下功夫了。2、一般都使用wait/notify进行线程间的通信,所以楼主还是考虑下这对组合吧,不要钻牛角尖
解决方案九:
自己再看看理论吧,把你知道的掌握的理论和你的问题节点说清楚哈,自己动手,一键搞定
解决方案十:
wait/notifyALL这对信程通信,也不能唤醒指定线程,而只是唤醒等待线程进入就绪序列。而CPU执行的不一定就是你的指定的线程,它是不可控的。
解决方案十一:
对啊,我就是遇到了9楼说的那个问题,才来问大家的啊
解决方案十二:
请问为什么要唤醒指定线程