关于java中 interrupt,中断线程,我怎么怎样都不能中断

为什么我的interrupt不能中断线程;我是全抄的教程视频上的;视频上就能中断;importjava.util.*;publicclassTestInterrupt{p... 为什么我的interrupt 不能中断 线程;我是全抄的教程视频上的;视频上就能中断;
import java.util.*;
public class TestInterrupt {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
thread.interrupt();
}
}
}

class MyThread extends Thread {
public void run() {
while(true) {
System.out.println("===" + new Date() + "===");
try {
sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
}

我也试过 把 thread.interrupt(); 放在catch外面也不行
我也试过 用过时的 stop 不行;试过在MyThread 类里声明一个boolean变量放while里
然后在main方法下面赋值 false 也不能中断 ,怎么回事呀。。。
展开
 我来答
小傻

2015-11-05 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31135
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

java线程中interrupt执行之后,并不能阻止线程执行,可以使用变量来控制,如下代码:

package com.qiu.lin.he;

import java.io.IOException;

public class CeShi extends Thread {
volatile boolean stop = false;

public static void main(String[] args) throws IOException,
InterruptedException {
CeShi thread = new CeShi();
System.out.println("Starting thread...");
thread.start();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Asking thread to stop...");

thread.stop = true;
Thread.sleep(3000);
System.out.println("Stopping application...");
}

@Override
public void run() {
while (!stop) {//当stop变量为false时,则停止
System.out.println("Thread is running...");
long time = System.currentTimeMillis();
while (System.currentTimeMillis() - time < 1000 && !stop) {
}
}
System.out.println("Thread exiting under request...");
}

}

运行结果如下:

jg...7@163.com
2011-04-19 · TA获得超过287个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:193万
展开全部
以下为我的实现代码,可以试下:
import java.util.Date;
public class TestInterrupt {

/**
* @param args
*/
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
int i = 0;
while(i++<=10){ //当i=10时,终止标志设为true
thread.stopThread();
}

}

}

class MyThread extends Thread {
private boolean stopFlag = false ; //设置终止标志为false
public void run() {
while(true) {
System.out.println("===" + new Date() + "===");
try {
sleep(1000);
if(stopFlag){//当终止标志为true时,跳出循环体,线程结束
interrupt(); //当触发interrupt操作时,会
}
} catch(InterruptedException e) {
break;
}
}
}

public void stopThread(){
stopFlag = true;
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
残瓶使3621
2012-05-25 · TA获得超过6.2万个赞
知道大有可为答主
回答量:3.2万
采纳率:0%
帮助的人:4295万
展开全部
catch (InterruptedException e) {
thread.interrupt();
}
应该写成:
catch (InterruptedException e) {
}
thread.interrupt();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式