首页 > 编程语言 >Java线程中断机制

Java线程中断机制

时间:2022-12-08 10:00:14浏览次数:45  
标签:Java Thread 中断 interrupted isInterrupted 线程 interrupt

在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关。

要点:使用interrupt()中断一个线程,该方法只是标记中断,并不会马上中断。马上中断使用stop(),该方法已过期,不建议使用(立刻中断容易造成生产数据一致性问题)。

 

interrupt()、interrupted()、isInterrupted()和stop()方法的使用和区别

demo代码:

 1 package org.example;
 2 
 3 public class Main {
 4     public static void main(String[] args) throws InterruptedException{
 5         //interrupt()、interrupted()、isInterrupted()和stop()方法的使用和区别
 6         Thread t = new Thread(new Runnable() {
 7             @Override
 8             public void run() {
 9                 int i=0;
10                 //for(;;) System.out.println(i++);//没有设置中断标记条件则永远不会中断
11 
12 /*                while (!Thread.currentThread().isInterrupted())//设置了中断标记,可以被中断
13                     System.out.println(i++);*/
14 
15                 while (!Thread.interrupted())//设置了中断标记,可以被中断,并在之后清除中断标记
16                     System.out.println(i++);
17 
18                 System.out.println(Thread.currentThread().isInterrupted());//上面调用isInterrupted()输出true,调用interrupted()输出false
19             }
20         });
21         t.start();
22         Thread.sleep(2000);
23         //t.stop();//立即停止线程(不管线程任务有没有执行完毕都马上退出并释放锁,不再建议使用,生产中可能会导致数据不一致。
24         t.interrupt();//不会停止线程,只是给线程设置中断标记。线程任务是否真的中断,取决于线程自己。程序会继续往下执行。
25 
26     }
27 }

 

同时从源码中可以看到:interrupted()方法和isInterrupted()方法调用相同,只是传参加了一个清除中断标记信息。

 

也注意到,

在ThreadPoolExecutor线程池中,有interrupted()、isInterrupted()、interrupt()方法的实际应用:

 

标签:Java,Thread,中断,interrupted,isInterrupted,线程,interrupt
From: https://www.cnblogs.com/hangwei/p/16960547.html

相关文章

  • JavaWeb三大组件(Servlet、Filter、Listener)
    vue.runtime.esm.js:587[Vuewarn]:Errorincallbackforwatcher"form.psiType":"TypeError:Cannotreadpropertiesofundefined(reading'form')"——————......
  • JavaScript:代码细节和良好编码习惯
    这些细节,与语法无关,仅仅是编写代码时需要注意的最最基本的细节和一些良好编码习惯。注释代码注释代码分为单行注释和多行注释,如下所示:严格区分大小写JS的代码时严格区......
  • JavaScript:严格模式"use strict"
    因为历史遗留问题,JS其实存在很多feature,以及兼容性问题;所以JS在ES5之后,新增了一个严格模式,以区别于普通模式,用来激活新的特性,使得某些代码的执行准确无误;如何开启严格模......
  • JavaSE复习day3
    JavaSE复习day3胡家伟10.匿名对象&高内聚低耦合匿名对象概念匿名对象就是没有名字的对象,创建对象时,只在堆内存中开辟空间,不会在栈内存中开辟空间存储堆内存空间的地址......
  • Java链式调用实现(以javaBean为例)
    定义一个javaBeanpublicclassUser{publicStringname;publicStringage;publicUser(Stringname,Stringage){this.name=name;......
  • JavaScript:是一种什么样的编程语言?
    有关JavaScript的发展历程,百度百科上已经说得很清楚了,这里不赘述,只是想谈一下我刚刚接触JS的一些感触。作为后端java开发者,初次学习JS的时候,真的觉得JS非常的不严谨,很混乱......
  • JavaScript:代码应该编写在哪里?
    我们可以将JS的代码,编写在三个地方。但是无论编写在哪里,最后它都会嵌入进网页代码中,被浏览器执行。编写在script标签中我们可以直接在HTML的script标签中,编写大段JS代码......
  • 8 网络&多线程
    HeadFirstJava和AcWingJava课程做的总结8。所有网络运作的低层细节都已经由java.net函数库处理掉了。传送与接收网络上的数据只不过是链接上使用不同的链接串流的输......
  • Java Web服务器是怎么处理请求的?
    从2017年初开始自学Java,到现在工作一年半,恍然间已经在Java世界里畅游了大概5年。作为一名Java后端程序员,如今日常工作就是写写接口,用来接收前端的请求,然后返回处理结果。......
  • Java流程控制(4)选择结构
                  ......