首页 > 其他分享 >中断机制之通过interrupt实现线程中断停止

中断机制之通过interrupt实现线程中断停止

时间:2024-01-21 15:55:07浏览次数:26  
标签:-------- Thread 中断 t1 线程 interrupt

如何停止中断运行中的线程?

首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了

interrupt实现线程中断停止

用isInterrupted 判断当前线程是否被中断 ,用interrupt()设置线程中断状态

package com.kwfruit.thread.interruptdemo;

import java.util.concurrent.TimeUnit;

public class Interruptdemo {


    static volatile boolean isStop = false;

    public static void main(String[] args) {

        Thread t1 = new Thread(() -> {

            while (true) {

                /**
                 * public boolean isInterrupted()
                 * 实例方法
                 * 判断当前线程是否被中断(通过检查中断标志位)
                 */
                if (Thread.currentThread().isInterrupted()) {
                    System.out.println(Thread.currentThread().getName() + "\t isStop被修改为true 程序停止");
                    break;
                }

                System.out.println("t1 --------hello interrupt api");

            }


        }, "t1");

        t1.start();

        System.out.println("t1 的默认中断标志为 "+t1.isInterrupted());


        try {
            TimeUnit.MICROSECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(()->{

        /**
         * public void interrupt()
         * 实例方法 Just to set the interrupt flag
         * 实例方法仅仅是设置线程的中断状态为true,发起一个协商而不会立刻停止线程
         */
         t1.interrupt();


        },"t2").start();



    }

}

t1 的默认中断标志为 false
t1 --------hello interrupt api
t1 --------hello interrupt api
t1 --------hello interrupt api
t1 --------hello interrupt api
t1	 isStop被修改为true 程序停止

Process finished with exit code 0


标签:--------,Thread,中断,t1,线程,interrupt
From: https://www.cnblogs.com/mangoubiubiu/p/17977934

相关文章

  • 中断机制之通过AtomicBoolean实现线程中断停止
    如何停止中断运行中的线程?首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了AtomicBoolean实现线程中断演示通过修改共享变量的方式来达到通知的目的从而使目的线程......
  • 中断机制之通过volatile实现线程中断停止
    如何停止中断运行中的线程?首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了volatile实现线程中断演示通过修改共享变量的方式来达到通知的目的从而使目的线程中断......
  • JUC并发编程 线程中断介绍及相关Api方法
    什么是中断机制首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供......
  • linux之线程互斥(万字长文详解)
    linux之线程互斥多线程在访问共享资源时的问题假如我们设置一个全局变量!inttickets=1000;//充当有1000张票void*getTicket(void*args){std::stringusername=static_cast<constchar*>(args);while(true){if(tickets>0){......
  • 【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析
    专栏介绍学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。前提准备编程基础:具备良好的编程基础,理解面向对象编程(OOP)的基本概念,熟悉Java编程语言。数据结构与算法:对基本的数据结构和算法有一定了解,理......
  • 线程池最佳实践!这几个坑使用不当直接生产事故!!
    拿来即用!这篇文章我会介绍我使用线程池的时候应该注意的坑以及一些优秀的实践。1、正确声明线程池线程池必须手动通过 ThreadPoolExecutor 的构造函数来声明,避免使用Executors 类创建线程池,会有OOM风险。Executors 返回线程池对象的弊端如下(后文会详细介绍到):FixedThreadPo......
  • C++多线程3
    1利用栈特性自动释放锁RAII1.1什么是RAIIRAII(ResourceAcquisitionIsInitialization),使用局部对象管理资源的技术称为资源获取既初始化,它的生命周期由操作系统管理,无需人工干预。为什么要引入自动释放锁,因为我们有时会因为忘记释放锁,而造成死锁或内存泄漏。我们先来手动实......
  • 多线程与多进程
    多线程和多进程爬虫在很多场景中,爬虫需要抓取大量的数据,而且需要做大量的分析工作。如果只使用单线程的爬虫,效率会非常低。通常有实用价值的爬虫会使用多线程或多进程,这样可以很多工作同时完成,尤其在多CPU的机器上,执行效率更是惊人。一、线程与进程1、进程计算机程序有静态和......
  • 线程同步之条件变量
    目录condition_variable简介成员函数实现线程间的通信condition_variable简介std::condition_variable是C++中用于线程同步的一个类。它通常与std::mutex一起使用,用于在一个或多个线程中阻塞,直到另一个线程修改了共享变量并通知了condition_variable。下面是一个例子,演示了如何......
  • C++11原子变量:线程安全、无锁操作的实例解析
     在C++11中,原子变量(std::atomic)提供了一种线程安全的方式来操作共享变量。下面是一个简单的例子,演示了C++11原子变量的用法。#include<iostream>#include<atomic>#include<thread>std::atomic<int>counter(0);//声明一个原子整数变量voidincrementCounter(int......