当前位置: 技术问答>java相关
多线程的问题,为什么程序会死调呢?请高手帮忙
来源: 互联网 发布时间:2017-03-14
本文导语: 多线程类有是先运行start方法,start方法实际上是调用run方法.我不明白的地方是run()方法能否被多次调用呢? 我发现当run方法里面包含有while()之类循环语句的时候,run方法不能被多次调用 但当run方法没有包含while()循环语句的时候...
多线程类有是先运行start方法,start方法实际上是调用run方法.我不明白的地方是run()方法能否被多次调用呢?
我发现当run方法里面包含有while()之类循环语句的时候,run方法不能被多次调用
但当run方法没有包含while()循环语句的时候,调用是没有问题的,不知道是什么原因?
以下是源代码
|
你可以将
public synchronized void run()
{
while(!stop)
{
state.setText(" Peeker "+(++session)+" ; value= "+blocker.read());
try{sleep(1000);
}catch(InterruptedException e){ }
}
state.setText("a"+(j++));
System.out.println("true");
}
更改成
public synchronized void run()
{
while (true)
{
try
{
Thread.sleep(1000);
}
catch(Exception e){}
while(!stop)
{
state.setText(" Peeker "+(++session)+" ; value= "+blocker.read());
try{sleep(1000);
}catch(InterruptedException e){ }
}
state.setText("a"+(j++));
System.out.println("true");
}
}
可能会实现你想要的功能,你只要改变stop的状态就可以了。
public synchronized void run()
{
while(!stop)
{
state.setText(" Peeker "+(++session)+" ; value= "+blocker.read());
try{sleep(1000);
}catch(InterruptedException e){ }
}
state.setText("a"+(j++));
System.out.println("true");
}
更改成
public synchronized void run()
{
while (true)
{
try
{
Thread.sleep(1000);
}
catch(Exception e){}
while(!stop)
{
state.setText(" Peeker "+(++session)+" ; value= "+blocker.read());
try{sleep(1000);
}catch(InterruptedException e){ }
}
state.setText("a"+(j++));
System.out.println("true");
}
}
可能会实现你想要的功能,你只要改变stop的状态就可以了。
|
当你的线程运行还没结束时,再次试图启动这个线程将抛出异常