2021-04-18 11:25  阅读(100)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-thread-multiple.html

Java线程教程 - Java线程中断

我们可以通过使用interrupt()方法中断一个活动的线程。

这个方法调用在线程只是一个指示。它是由线程如何响应中断。

例子

下面的代码显示了中断主线程并打印线程中断状态的代码。

    public class Main {
      public static void main(String[] args) {
        System.out.println("#1:" + Thread.interrupted());
    
        // Now interrupt the main thread
        Thread.currentThread().interrupt();
    
        // Check if it has been interrupted
        System.out.println("#2:" + Thread.interrupted());
    
        // Check again if it has been interrupted
        System.out.println("#3:" + Thread.interrupted());
      }
    }
    

上面的代码生成以下结果。

20210418112113_1.png

例2

下面的代码如何一个线程将中断另一个线程。

    public class Main {
      public static void main(String[] args) {
        Thread t = new Thread(Main::run);
        t.start();
        try {
          Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        t.interrupt();
      }
    
      public static void run() {
        int counter = 0;
        while (!Thread.interrupted()) {
          counter++;
        }
        System.out.println("Counter:" + counter);
      }
    }
    

上面的代码生成以下结果。

2021041811214_2.png

例3

Thread类有一个非静态的isInterrupted()方法,可以用来测试一个线程是否被中断。

    public class Main {
      public static void main(String[] args) {
        System.out.println("#1:" + Thread.interrupted());
    
        Thread mainThread = Thread.currentThread();
        mainThread.interrupt();
    
        System.out.println("#2:" + mainThread.isInterrupted());
    
        System.out.println("#3:" + mainThread.isInterrupted());
    
        System.out.println("#4:" + Thread.interrupted());
    
        System.out.println("#5:" + mainThread.isInterrupted());
      }
    }
    

上面的代码生成以下结果。202104181126_3.png

例4

你可以中断一个被阻塞的线程。

如果在这三种方法上阻塞的线程被中断,则抛出一个InterruptedException,并清除线程的中断状态。

以下代码启动一个休眠一秒的线程,并打印一条消息,直到它被中断。

    public class Main {
      public static void main(String[] args) throws InterruptedException{
        Thread t = new Thread(Main::run);
        t.start();
        Thread.sleep(5000);
        t.interrupt();
      }
    
      public static void run() {
        int counter = 1;
        while (true) {
          try {
            Thread.sleep(1000);
            System.out.println("Counter:" + counter++);
          } catch (InterruptedException e) {
            System.out.println("I got  interrupted!");
          }
        }
      }
    }
    

上面的代码生成以下结果。

202104181125_4.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 线程中断
上一篇
Java 守护线程
下一篇
Java 线程组