java线程相关

中断一个正在运行的线程

  1. 中断阻塞线程的方法
@Override
public void run() {
    try {
        while (true) {
            // 执行任务...
        }
    } catch (InterruptedException ie) {  
        // 由于产生InterruptedException异常,退出while(true)循环,线程终止!
    }
}

我们调用线程对象的interrupt()方法时会产生InterruptedException中断。中断的捕获在while(true)之外,这样就退出了while(true)循环!
2.终止处于运行状态的线程

@Override
public void run() {
    while (!isInterrupted()) {
        // 执行任务...
    }
}

isInterrupted()是判断线程的中断标记是不是为true。当线程处于运行状态,并且我们需要终止它时;可以调用线程的interrupt()方法,使用线程的中断标记为true,即isInterrupted()会返回true。此时,就会退出while循环。
3.通过标志位中断线程

private volatile boolean flag= true;
protected void stopTask() {
    flag = false;
}
@Override
public void run() {
    while (flag) {
        // 执行任务...
    }
}

通过volatile变量保证内存的可见性,从而保证多线程设置标志位终止线程

线程的join()方法

public class JoinTest implements Runnable{  
      
    public static int a = 0;  
  
    public void run() {  
        for (int k = 0; k < 5; k++) {  
            a = a + 1;  
        }  
    }  
  
    public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        System.out.println(a);  
    }         
}  

正常情况下,打印出来a的值不确定,因为主线程启动t之后继续往下走,执行打印语句,此时子线程执行到哪一步还不确定,所以a的值不能确定,如果我想在执行完子线程之后再打印怎么实现呢,如下:

public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        t.join(); //加入join()  
        System.out.println(a);  
    }

改为如下代码即可实现子线程执行完在执行打印语句,join()方法其实就是当前线程等待调用join()方法的线程执行完在继续执行当前线程的代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 下面是Java线程相关的热门面试题,你可以用它来好好准备面试。 1) 什么是线程? 线程是操作系统能够进行运算调度...
    冰箱哥哥阅读 3,459评论 0 2
  • Java线程相关方法 1. sleep public static native void sleep(long ...
    Leocat阅读 2,372评论 0 0
  • Java 线程相关 如何创建线程(两种方式,区别,使用场景)线程状态调度多线程数据共享(会有什么问题,如何实现共享...
    一灰灰blog阅读 1,891评论 0 0
  • 谁把灰色涂抹云端 遮住太阳的暖 放眼望去,五彩六色的花朵 飘落在浅夏的季节 花飞花满天 谁会在意,心底那份珍惜 有...
    一滴露水阅读 1,535评论 14 9
  • 很早以前听过这样的话,说一些主管招聘的时候都会招一些长得漂亮的女孩,因为长得漂亮的女孩,坐在面前都很养眼。细细听来...
    梅子Mey阅读 3,203评论 6 2

友情链接更多精彩内容