您的位置:首页 > 编程语言 > Java开发

java停止线程

2014-04-25 20:45 316 查看
/**
* 简单情况下可以使用退出标志来停止线程,但如果线程处于阻塞状态,退出标志无
* 法被及时察觉,则线程就无法停止;因此在使用退出标志的同时也要使用interrupt()
*
* @author yangww
*/
public class main_test {

public static void main(String[] args) throws InterruptedException {
MyThread m1 = new MyThread();//同一个m1只能被启动一次,停止线程并不是说它可以重新启动;
m1.start();

Thread.sleep(5000);
// System.out.println("使用停止标志终止线程");
// m1.stop = true; // 设置共享变量为true

System.out.println("使用interrupt()终止线程");
// interrupt()方法不会中断一个正在运行的线程,但它可以使一个被阻塞的线程抛出一个中断异常,在此异常里,可以设置退出标志,从而使用线程退出;
m1.interrupt();
}
}

class MyThread extends Thread {
// 此任务可能被多个线程同时执行,stop作为多线程共享的同步变量。
volatile boolean stop = false;// 退出标志,注:如果线程处于阻塞状态,则退出标志不会被及时更新,线程将无法退出;

public void run() {
while (!stop) {
try {
System.out.println("我在执行---");
sleep(1000);
} catch (InterruptedException e) {
System.out.println("接到InterruptedException,准备更新线程退出标志");
stop = true; // 在异常处理代码中修改共享变量的状态
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 停止线程