问答详情
源自:3-3 Java线程停止广为流传的错误方法---interrupt方法

个人练习:正确使用interrupt()停止进程

package com.imooc.concurrent.base;

public class InterruptWayStopThread extends Thread{
	
	volatile boolean stop = false;
	public static void main(String[] args) {
		InterruptWayStopThread thread = new InterruptWayStopThread();
		System.out.println("Starting thread...");
		thread.start();
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Interrupting thread...");
		thread.stop = true;        //线程要是处于阻塞模式,将不会检查此处的变量
		thread.interrupt();
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("Stopping appplication...");		
	}
	
	@Override
	public void run() {
		while(!stop){
			System.out.println("Thread is running...");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				System.out.println("Thread interrupted..");
			}
		}
		System.out.println("Thread exiting under requestion...");
				
	}

}


提问者:码农_鑫森淼焱垚 2015-09-23 00:37

个回答

  • qq_云在风中_0
    2016-05-20 22:33:36

    哈哈,微笑不语

  • Doc献世
    2016-03-16 20:37:52

      哎呦,这个还是用了标志位设置的。。。

  • 蒲柳隐逸
    2015-10-14 22:42:06

    thread.stop = true;        //线程要是处于阻塞模式,将不会检查此处的变量

    这句是什么意思啊?是字面意思吧?就是thread在sleep的时候不去取stop的值?