黑马程序员技术交流社区

标题: 多线程3 [打印本页]

作者: 小白进阶之路    时间: 2017-12-29 18:07
标题: 多线程3

如何停止一个正在运行的线程?
1)使用定义一个volatile的退出标志终止线程

class ThreadFlag extends Thread{

    private volatile boolean exit = false;

    public void shutdown(){
        exit = true;
    }

    @Override
    public void run() {
        while (!exit);
    }
}

ThreadFlag threadFlag = new ThreadFlag();
threadFlag.start();
Thread.sleep(5*1000);
threadFlag.shutdown();
threadFlag.join();
2)使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。

3)使用interrupt方法中断线程

class ThreadInterrupt extends Thread{

    @Override
    public void run() {
        try {
            sleep(50000);
        } catch (InterruptedException e) {
            System.err.println(e.getMessage());
        }
    }
}
ThreadInterrupt threadInterrupt = new ThreadInterrupt();
threadInterrupt.start();
System.in.read();
threadInterrupt.interrupt();
threadInterrupt.join();



volatile关键字是如何保证内存可见性

说白了volatile修饰的变量,JVM保证了每次读变量都从内存中读,而不是CPU cache。见面试5,里面有详细讲解。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2