V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
dvsusan123
V2EX  ›  Java

如何安全中断一个正在运行的线程?

  •  
  •   dvsusan123 · 33 days ago · 2845 views
    This topic created in 33 days ago, the information mentioned may be changed or developed.
    线程是操作系统进行运算调度的最小单位,所以线程是系统级别的概念。

    在 Java 中,可以使用 Thread.interrupt()方法安全中断一个正在运行的线程。

    其中 Thread.interrupt()方法用于设置线程的中断状态为"中断"。它并不会直接终止线程的执行,而是给线程一个中断信号。

    在执行线程的代码中,可以通过检查 Thread.interrupted()或 Thread.currentThread().isInterrupted()方法来判断线程是否被中断。

    如果线程被中断,应根据具体情况决定如何处理中断。可以选择抛出 InterruptedException 异常、恢复线程到一个安全的状态,或者终止线程的执行。

    如果线程处于等待状态(如 Thread.sleep()、Object.wait()、Thread.join()等),那么线程会立即从等待状态返回,并且 InterruptedException 异常会被抛出。

    使用 Thread.interrupt()方法可以安全地中断一个正在运行的线程,并通过 Thread.currentThread().isInterrupted()方法检查线程的中断状态。在处理中断时,可以选择抛出 InterruptedException 异常、恢复线程到安全状态或者终止线程的执行。
    22 replies    2024-04-22 15:57:45 +08:00
    cppc
        1
    cppc  
       33 days ago   ❤️ 9
    想引流就搞点像样的东西
    dvsusan123
        2
    dvsusan123  
    OP
       33 days ago
    最近就业形式有点困难,我建了一些工作内推群,里面有一些工作内推的机会,有需要的小伙伴,可以加我微信:su_san_java ,备注:v2ex+所在城市,即可拉你进群。
    dvsusan123
        3
    dvsusan123  
    OP
       33 days ago
    @cppc 别急,我的干货文章很多,后面会逐步发表的,第一次玩这个网站,先发一篇简短的内容跑一下流程。
    kenvix
        4
    kenvix  
       33 days ago
    这种 Java 入门的东西就没必要拿来引流了吧
    dvsusan123
        5
    dvsusan123  
    OP
       33 days ago
    @kenvix 哈哈哈,收到,我后面发点有深度的,先发一篇文章试试水。
    bashbot
        6
    bashbot  
       33 days ago
    推广请发推广节点
    建议先去看下 guide https://v2ex.com/go/guide
    在这个论坛发言请珍惜自己账号和 IP
    dvsusan123
        7
    dvsusan123  
    OP
       33 days ago
    @bashbot 收到
    macaodoll
        8
    macaodoll  
       33 days ago via Android
    毫无营养的水文
    dlmy
        9
    dlmy  
       33 days ago   ❤️ 4
    这是 v 站,一个技术大佬扎堆的地方,发入门级别的东西确实会挨喷。

    Java 的 Thread 类在 JVM 中只是一个对象而已,它内部的关键方法都是 native 修饰的,而在 JVM 中是通过 JNI 技术调用 native 修饰的方法。
    当你创建一个 Java Thread 对象时,在这个对象内部,也会创建一个操作系统的线程,这样就把 Java 的线程和操作系统的线程关联起来了。
    在你上面说的调用 Thread.interrupt 方法,增加一个线程中断标识位,底层调用的是 pthread 库中的函数,最终调用操作系统级别的 os::interrupt...


    在 v 站想引流的话真的需要搞点像样的东西,别弄一些烂大街的八股文,这样会显得自己 low level 。
    fzdwx
        10
    fzdwx  
       33 days ago
    我的评价是一托
    dvsusan123
        11
    dvsusan123  
    OP
       33 days ago
    @macaodoll 长篇好文要注册满 15 天之后,才能发。
    thomaspaine
        12
    thomaspaine  
       33 days ago
    @dvsusan123 那就别发了,你猜多少人已经直接 block 你了
    zfjdif
        13
    zfjdif  
       33 days ago
    block 了,下次记得上干货 XD
    IvanLi127
        14
    IvanLi127  
       33 days ago
    能换个地方侮辱人么?快去做点功课吧,这里没那么多韭菜给你割。
    dvsusan123
        15
    dvsusan123  
    OP
       33 days ago
    @IvanLi127 有些人太自以为是了,我怎么割韭菜了?
    totoro52
        16
    totoro52  
       33 days ago
    能上 V 站就可以排除掉大部分小白了,和你发的文章内容太冲突了, 推不开的
    zuixinwenyue
        17
    zuixinwenyue  
       32 days ago
    怎么举报?
    tongqe
        18
    tongqe  
       32 days ago
    站长,把这人屏蔽了吧
    sleepybear1113
        19
    sleepybear1113  
       32 days ago
    本来点进来还以为又有什么骚操作呢,结果一看就是烂大街的东西。甚至还不如 anything 那个人的帖子有趣
    dvsusan123
        20
    dvsusan123  
    OP
       32 days ago
    @zuixinwenyue 你敢不敢写一篇文章出来看看?
    dvsusan123
        21
    dvsusan123  
    OP
       32 days ago
    @tongqe 你敢不敢写一篇文章出来看看?
    8355
        22
    8355  
       32 days ago
    你最后想说啥啊。。优雅停机?
    About   ·   Help   ·   Blog   ·   API   ·   FAQ   ·   Tools   ·   892 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:18 · PVG 05:18 · LAX 14:18 · JFK 17:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.