美文网首页
java线程相关

java线程相关

作者: camlboy | 来源:发表于2017-05-05 09:29 被阅读3次

中断一个正在运行的线程

  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()方法的线程执行完在继续执行当前线程的代码。

相关文章

  • Android 高级面试-3:语言相关

    主要内容:Kotlin, Java, RxJava, 多线程/并发, 集合 1、Java 相关 1.1 缓存相关 ...

  • Java线程基本方法

    相关线程的基本方法,都会影响Java线程状态的变化,常见的Java线程方法有wait、notify、notifyA...

  • Android下多线程的实现

    Android下多线程相关 线程安全相关问题参考:java内存模型与线程 android下与多线程有关的主要有以下...

  • Java的juc相关容器,工具,框架介绍

    主要介绍Java相关并发容器,原子类,以及线程池框架 Java相关并发容器 ConcurrentHashMap采用...

  • java线程相关

    做了一个跟多线程相关的oj。遇到几个问题如下: 1 同一个线程不能多次start(),否则出发异常,如果需要多次启...

  • java线程相关

    中断一个正在运行的线程 中断阻塞线程的方法 我们调用线程对象的interrupt()方法时会产生Interrupt...

  • Java 线程相关

    目录1.并行与并发2.进程与线程---- 2.1 进程---- 2.2 线程---- 2.3 进程与线程的区别--...

  • JAVA线程相关

    thread.join() 等待thread线程执行完才继续向下执行代码,但是可以执行之前的线程Thread.sl...

  • Java『线程相关』

    Java线程 线程是进程中实施调度和分派的基本单位。一个进程可以包含多个线程,一个线程只能在一个进程的地址空间内活...

  • Java 线程池

    Java线程池是java cocurrent包下提供的类,使用非常方便。本文希望整理下Java 线程池相关的知识以...

网友评论

      本文标题:java线程相关

      本文链接:https://www.haomeiwen.com/subject/qvsjtxtx.html