黑马程序员技术交流社区
标题:
不能终止线程,死循环这是为什么?
[打印本页]
作者:
jaijaiok
时间:
2013-12-5 23:50
标题:
不能终止线程,死循环这是为什么?
我想通过 t.interrupt();终止线程的运行,可结果却是死循环,未能终止线程,这是为什么呢?哪位大侠帮忙解答!!!
class Demo implements Runnable
{
//boolean flag = true ;
public void run()
{
int i = 0 ;
while(flag)
{
System.out.println("运行 i = "+i++) ;
}
}
};
public class ThreadDemo20
{
public static void main(String args[])
{
// 希望while循环运行100毫秒之后程序要停止
Demo d = new Demo() ;
Thread t = new Thread(d) ;
t.start() ;
try
{
Thread.sleep(10) ;
}
catch (Exception e)
{
}
// 修改标志位,使线程停止
//d.flag = false ;
t.interrupt();
}
};
复制代码
作者:
sd110572
时间:
2013-12-5 23:56
主线程休眠之后,还未获得时间片,已经栈溢出了.
你Thread.sleep(10),让线程睡10毫秒,,,因为你是在主线程执行的 所以你让主线程睡10毫秒, 可是你demo线程没睡啊,然后你又t.interrupt() ,,t线程根本就没睡,你还intterupt... 还有就是 你把那个注释的前面2杠去掉 是不是就可以了?,你想用第二种方法 看行不行?
作者:
┾——黑马
时间:
2013-12-6 09:41
将这第3行和第32行注释去掉,然后将第12行和第32行的";"去掉就行了,问题就解决了
作者:
想你的夜
时间:
2013-12-6 12:25
就稍微改了点就是你的要求啊把关键两个注释去掉就行了
class Demo implements Runnable
{
boolean flag = true ;
public void run()
{
int i = 0 ;
while(flag)
{
System.out.println("运行 i = "+i++) ;
}
}
}
public class ThreadDemo20
{
public static void main(String args[])
{
// 希望while循环运行100毫秒之后程序要停止
Demo d = new Demo() ;
Thread t = new Thread(d) ;
t.start() ;
try
{
Thread.sleep(10) ;
}
catch (Exception e)
{
}
// 修改标志位,使线程停止
d.flag = false ;
t.interrupt();
}
}
作者:
王家胜
时间:
2013-12-6 14:20
如果我给你说上面的人都是背概念的你信不信
interrupt()方法的作用只是用来改变线程的中断状态(把线程的中断状态改为true,即被中断)并不能是线程终止
楼上的回答可以解决你的问题通过boolean控制,我估计你是想用Thread的interrup方法进行终止,如果用这方法确实可以终止,但不知Jni内部是如何实现的,你最好还是让线程自然的消亡的好
public void interrupt() {
if (this != Thread.currentThread())
checkAccess();
synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
interrupt0(); // Just to set the interrupt flag
b.interrupt(this);
return;
}
}
interrupt0();
}
复制代码
private native void interrupt0();//这是JNI
作者:
jaijaiok
时间:
2013-12-6 21:01
王家胜 发表于 2013-12-6 14:20
如果我给你说上面的人都是背概念的你信不信
interrupt()方法的作用只是用来改变线程的中断状态(把线程的中 ...
:handshake
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2