黑马程序员技术交流社区
标题:
多线程停止问题
[打印本页]
作者:
DOOR
时间:
2013-12-31 23:09
标题:
多线程停止问题
本帖最后由 DOOR 于 2014-1-4 18:03 编辑
class StopThread implements Runnable//1
{
private boolean flag = true;
public void run()//2
{
while(flag)//3
{
try
{
wait();
}
catch (InterruptedException e)
{
System.out.println(Thread.currentThread().getName()+"....Exception");
}
System.out.println(Thread.currentThread().getName()+"....run");
}
}
public void changeFlag()//6
{
flag=false;
}
}
class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st = new StopThread();//4
Thread t1 = new Thread(st);
Thread t2 = new Thread(st);
t1.start();
t2.start();
int num = 0;//5
while(true)
{
if (num++ == 60)
{
st.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"........"+num);
}
}
}
复制代码
为什么我写的这个特殊情况线程没有挂起来,求解
作者:
776699
时间:
2014-1-1 01:15
本帖最后由 776699 于 2014-1-1 01:18 编辑
在t1,t2,main线程运行时,当t1,t2,线程抢到执行权时,t1,t2,等待挂起,main主线程执行,完以后,t1,t2 并没有被唤醒,所以 st.changeFlag();不会被执行!!处于等状态。
解决方案:可以用interrupt() 让处于冻结的状态运行,t1.interrupt();t2,interrupt().
这样就可以中断线程。
因为你这个是多线程,你这个run方法里最好,加一个synchronized ,防止监控器 异常错误。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2