线程的打断

昇腾910B+MindIE部署Qwen模型避坑指南:从镜像下载到推理测试全流程 本文详细介绍了在昇腾910B硬件环境中使用MindIE推理工具部署Qwen系列模型的全流程指南。从环境准备、镜像下载到模型部署与性能优化,提供一站式解决方案,帮助开发者高效完成AI模型推理任务。 阅读详情

interrupt相关的三个方法:

public void interrupt()            //t.interrupt() 打断t线程(设置t线程某给标志位f=true,并不是打断线程的运行)
public boolean isInterrupted()     //t.isInterrupted() 查询打断标志位是否被设置(是不是曾经被打断过)
public static boolean interrupted()//Thread.interrupted() 查看“当前”线程是否被打断,如果被打断,恢复标志位

1. interrupt() :实例方法,设置线程中断标志(打扰一下,你该处理一下中断)
2. isInterrupted():实例方法,有没有人打扰我?
3. interrupted():静态方法,有没有人打扰我(当前线程)?复位!

 interrupt和sleep() wait() join()

sleep()方法在睡眠的时候,不到时间是没有办法叫醒的,这个时候可以用interrupt设置标志位,然后呢必须得catch InterruptedException来进行处理,决定继续睡或者是别的逻辑,(自动进行中断标志复位)

interrupt是否能中断正在竞争锁的线程

public class SleepHelper {
    public static void sleepSeconds(int seconds){
        try {
            Thread.sleep(seconds*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public class T09_Interrupt_and_sync {

    private static Object o = new Object();

    public static void main(String[] args) {
        Thread t1 = new Thread(()-> {
            synchronized (o) {
                SleepHelper.sleepSeconds(10);
            }
        });

        t1.start();

        SleepHelper.sleepSeconds(1);

        Thread t2 = new Thread(()-> {
            synchronized (o) {

            }
            System.out.println("t2 end!");
        });

        t2.start();

        t2.interrupt();
    }
}

//输出: t2 end!

结论:interrupt()不能打断正在竞争锁的线程synchronized()

如果想打断正在竞争锁的线程,使用ReentrantLock的lockInterruptibly()

import java.util.concurrent.locks.ReentrantLock;

public class T11_Interrupt_and_lockInterruptibly {

    private static ReentrantLock lock = new ReentrantLock();

    public static void main(String[] args) {
        Thread t1 = new Thread(()-> {
            lock.lock();
            try {
                SleepHelper.sleepSeconds(10);
            } finally {
                lock.unlock();
            }
            System.out.println("t1 end!");
        });

        t1.start();

        SleepHelper.sleepSeconds(1);


        Thread t2 = new Thread(()-> {
            System.out.println("t2 start!");
            try {
                lock.lockInterruptibly();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
            System.out.println("t2 end!");
        });

        t2.start();

        SleepHelper.sleepSeconds(1);
        
        t2.interrupt();

    }
}

输出结果

t2 start!
java.lang.InterruptedException
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireInterruptibly(AbstractQueuedSynchronizer.java:898)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1222)
	at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
	at com.example.demo.test.T11_Interrupt_and_lockInterruptibly.lambda$main$1(T11_Interrupt_and_lockInterruptibly.java:28)
	at java.lang.Thread.run(Thread.java:748)
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
	at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:151)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1261)
	at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:457)
	at com.example.demo.test.T11_Interrupt_and_lockInterruptibly.lambda$main$1(T11_Interrupt_and_lockInterruptibly.java:32)
	at java.lang.Thread.run(Thread.java:748)
t1 end!

优雅的结束线程

1. 自然结束(能自然结束就尽量自然结束)
2. stop() suspend() resume()
3. volatile标志
   1. 不适合某些场景(比如还没有同步的时候,线程做了阻塞操作,没有办法循环回去)
   2. 打断时间也不是特别精确,比如一个阻塞容器,容量为5的时候结束生产者,
      但是,由于volatile同步线程标志位的时间控制不是很精确,有可能生产者还继续生产一段儿时间
4. interrupt() and isInterrupted(比较优雅)

 

 

Windows 上 openclaw onboard --install-daemon 命令的安装位置和启动配置 摘要:Windows系统中,执行openclaw-cnonboard--install-daemon命令会创建计划任务OpenClawGateway,该任务在用户登录时自动运行位于%USERPROFILE%.openclaw\gateway.cmd的脚本文件来启动服务。管理方法包括通过任务计划程序或命令行(schtasks)查看/启停任务,使用openclaw gateway命令操作服务,或通过删除计划任务和脚本文件完全卸载服务。该机制确保OpenClawGateway服务随系统登录自动启动。(149字) 阅读详情

相关推荐

避坑指南:LAMMPS做GCMC模拟时,化学势mu和压力p到底怎么设?

本文详细解析了LAMMPS中巨正则蒙特卡洛(GCMC)模拟的关键参数设置,特别是化学势(mu)与压力(p)的正确计算方法。通过理论分析、实用公式和黄金法则,帮助用户避免常见误区,提升模拟精度和效率,适用于各类复杂体系的分子模拟研究。

weixin_42525289的博客 429

等待synchronized锁时响应interrupted中断吗?

处于阻塞状态时线程不会响应中断,当等待到锁从阻塞状态恢复到runnable状态时线程的中断标志位还处于中断状态,这时如果有对标志位的判断是可以判断出处于中断状态的。

第四空间 517

Circos在Windows下的安装教程

这里写自定义目录标题Circos简介安装Perl 的安装Circos安装安装及解压安装Modules测试用例官方文档 Circos简介 (来源官网:http://circos.ca/software/readme/ O.INTRODUCTION部分) Circos is a program for the generation of publication-quality, circularly composited renditions of genomic data and related annot

qq_42318911的博客 1660

线程死锁预防解除检测,Java线程中断(interrupt)机制,为什么synchronized不可中断,死锁的解决方案

Java的中断是一种协作机制,也就是说通过中断并不能直接中断另外一个线程,而需要被中断的线程自己处理中断。在Java的中断模型中,每个线程都有一个boolean标识,代表着是否有中断请求(该请求可以来自所有线程,包括被中断的线程本身)。例如,当线程t1想中断线程t2,只需要在线程t1中将线程t2对象的中断标识置为true,然后线程2可以选择在合适的时候处理该中断请求,甚至可以不理会该请求,就像这个线程没有被中断一样。上面提到加的锁不能被中断,为什么呢?首先中断操作是Thread类调用。

锦年的博客 1030

ESP32对接百度智能云语音识别:从硬件配置到API调用的完整指南

本文详细介绍了ESP32对接百度智能云语音识别的完整流程,从硬件配置到API调用,涵盖麦克风选择、音频处理、错误处理及性能优化等关键环节。通过实战案例展示如何实现低成本、高效率的语音交互方案,特别适合智能硬件开发者参考。

weixin_29198045的博客 372

adams案例分析_案例1(麦弗逊悬架子系统创建)

本文字数3292字83图,建议阅读时间26分钟首先看下案例1的麦弗逊悬架数模结构就不细讲了,从数模上主要是获取硬点坐标(铰接点、安装点、参考点)及大部件结构(副车架、摆臂、转向节等实际运动过程中会产生变形的部件,在ADAMS Car中我们就可以用柔性体来搭建)再来回顾下上一篇讲到的模型元素1、Hardpoint——硬点(只有位置没有方向)2、Parameter Variable——参数...

weixin_39609407的博客 6474

【Java并发】synchronized不可以被中断?

synchronized方法可以被中断 我们常说synchronized不可以被中断,并不指synchronized方法不可中断,比如: public class InterruptSynMethodTest { public synchronized void foo() throws InterruptedException { System.out.println("foo be...

runhua的专栏 6286

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

为什么Synchronized不可中断?

为什么Synchronized不可中断?首先中断操作是Thread类调用interrupt方法实现的。基本上所有人都说Synchronized后线程不可中断,百度后的大部分文章都是这样解释说道: 不可中断的意思是等待获取锁的时候不可中断,拿到锁之后可中断,没获取到锁的情况下,中断操作一直不会生效。 验证真伪 以下为测试理论是否成立的Demo代码示例: publicclassUni...

deel_feel的博客 4119

Windows 11 上 WSL2 安装 Ubuntu 22.04 保姆级教程(含桌面环境配置)

本文提供在Windows 11上通过WSL2安装Ubuntu 22.04并配置桌面环境的详细教程。涵盖WSL2核心安装、性能调优、Xfce桌面环境部署以及开发环境集成,帮助开发者构建高效、无缝的Windows-Linux混合开发工作站。

Jerry的专栏 633

PySWMM新手避坑指南:从安装到批量处理INP文件的完整流程(附常见错误解决方案)

本文为PySWMM新手提供从环境搭建到批量处理INP文件的完整避坑指南。详细讲解了虚拟环境配置、库安装方法,并针对“无法打开输入文件”和对象访问错误等高频问题提供解决方案。核心部分展示了如何利用Python脚本实现INP文件的批量运行、结果汇总以及参数自动化修改,显著提升SWMM模型的工作效率。

weixin_29092031的博客 392

提升--02---线程的打断(interrupt)--线程的结束

线程的打断(interrupt) interrupt相关的三个方法: interrupt只是设置标志位,并不是真的断开线程 public void interrupt() //t.interrupt() 打断t线程(设置t线程某给标志位f=true,并不是打断线程的运行) public boolean isInterrupted() //t.isInterrupted() 查询打断标志位是否被设置(是不是曾经被打断过) public static boolean int

时光里的博客 994

【实战篇】【硅基流动API+Cherry Studio搭建个人知识库全流程解析:从零到精通的超详细指南】

在人工智能技术高速发展的今天,基于大语言模型的知识库已成为开发者提效的必备工具。然而云端服务存在响应延迟、数据隐私、硬件依赖等痛点。通过硅基流动API与的深度整合,我们既能享受大模型的强大能力,又能实现本地化部署与高效管理。本文将从环境配置到高阶调优,手把手带你构建企业级知识库系统。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1081

java线程之运行与打断

前言 小结一下常见的Thread关键点 线程启动与运行 三种方法 方法一,直接使用Thread new Thread(){ @Override public void run() { System.out.println("第一种方法"); } }.start(); 方法二,使用Runnable配合Thread new Thread(()->{ System.out.println("第二种方法"); }).start(); 方法三,FutureTa

DaHuangXiao的博客 2039

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java 线程打断_java线程打断后的状态

publicclassTest{publicstaticvoidmain(String[]args){perp=newper();Threadt=newThread(p);t.start();try{Thread.sleep(10000);t.interrupt();}catch(InterruptedExceptione){System...public class Test {public s...

weixin_31211977的博客 328

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

005 线程打断---完成线程的终结

一 . 线程打断   一个线程运行之后,我们就无法控制这个线程的具体的运行情况了.   在一个特殊的情况下,我们需要终结一个无线循环的线程任务或者是一个长时间运行的线程任务该怎么办?     在jdk之中,Thread类之中的很多方法都被废弃,原因就是这些方法是直接杀死线程,而线程获取的资源还可能未被释放.       现在还剩下一个interrupt()方法可以帮助我们实现这个功能. ...

weixin_30457465的博客 204

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

关于线程打断的一些事

关于线程的打断的一些事

小小葩的博客 303

Java——》线程的打断(停止正在运行的线程)

Java——》线程的打断(停止正在运行的线程) 一、设置boolean标志位 二、利用中断标志位 三、利用InterruptedException异常

小仙~ 592

java线程中的让步、打断、优先级

让当前运行线程主动让出CPU资源,进入就绪状态,使同优先级或更高优先级的线程有机会执行。通过优先级(1~10整数)影响线程调度顺序,优先级高的线程获得更多CPU时间。(若线程处于阻塞状态),或设置中断标志位(若线程在运行中)。向目标线程发送中断信号,触发。

oGuiGui12345的博客 355

JUC:打断正常线程、睡眠线程、park线程的interrupt状态、二阶段终止模式

并发编程打断正常线程、睡眠线程、park线程的interrupt。

Cosmoshhhyyy的博客 663

Java并发编程:打断正常运行的线程

打断正常运行的线程

m0_58535137的博客 182

java线程的打断状态和interrupt()、isInterrupted()、static interrupted()方法辨析

在java中,阻塞的线程可以打断后继续执行,线程打断前后会有一个打断状态的变化,这个状态会影响park方法的使用,本文主要介绍java打断状态相关的内容。LockSupport.park()会阻塞线程,生效的条件时阻塞状态为false,当阻塞状态为true时,方法无效无法阻塞线程。isInterrupted():返回当前线程的打断标记。从打印时间可以看到第二个park没有生效。interrupt():打断某一线程,2、park方法的使用。

baidu_40120883的博客 822

JNI-从jvm源码分析Thread.interrupt的系统级别线程打断原理

前言 在java编程中,我们经常会调用Thread.sleep()方法使得线程停止运行一段时间,而Thread类中也提供了interrupt方法供我们去主动打断一个线程。那么线程挂起和打断的本质究竟是什么,本文就此问题作一个探究。 本文主要分为以下几个部分 1.interrupt的使用特点 2.jvm层面上interrupt方法的本质 3.ParkEvent对象的本质 4.Park()对象的本质 5.利用jni实现一个可以被打断的MyThread类 1.interrupt的使用特点 我们先看2个线程打断的示

m0_37125602的博客 367

Java并发编程实例--3.打断一个线程

一般来讲一个java程序如果运行着多个线程,那么只有在这些线程都运行完毕后才会终止。但有时候,我们需要去结束某个线程或者取消某个任务。此时就用到了Java线程的打断机制,即interruption。本例中,我们将开发一个程序创建线程,5秒后将强制打断它。PrimeGenerator.javapackage com.dylan.thread.ch1.c03; /** * @author xusu...

老徐的博客只有干货 680

Thread的API详细介绍(二)线程的打断

文章目录1 线程打断(interrupt)1.1 interrupt()方法1.2 isInterrupted方法1.3 interrupted()方法1.4 isInterrupted和interrupted的其他说明 1 线程打断(interrupt) // 打断线程 public void interrupt(); // 是否打断 public static boolean interrupted(); // 是否打断 public boolean isInterrupted(); 1.1 inte

wyaoyao93的博客 457

Java并发编程:打断阻塞线程

打断阻塞线程

m0_58535137的博客 168
上一篇: 多线程之线程状态
下一篇: 秒懂jdk动态代理
zy_crazy_code
博客等级 码龄12年 290粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值