A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小白进阶之路 高级黑马   /  2017-12-29 18:07  /  1183 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


如何停止一个正在运行的线程?
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,里面有详细讲解。
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马