type
status
date
slug
summary
tags
category
password
icon
- ⼀个线程启动别的线程:
new Thread().start()
、Executor.execute()
等
- ⼀个线程终结另⼀个线程
Thread.
:立即终止,破坏性,无法恢复stop()
Thread.interrupt()
:温和式终结:不⽴即、不强制Thread.
interrupted
()
和isInterrupted()
:检查(和重置)中断状态InterruptedException
:如果在线程「等待」时中断,或者在中断状态「等待」,直接结束等待过程(因为等待过程什么也不会做,⽽interrupt()
的⽬的是让线程做完收尾⼯作后尽快终结,所以要跳过等待过程)
Thread.
interrupted
()
和 isInterrupted()
的区别
Thread.
interrupted
()
当线程被打断后,第一次调用 Thread.
interrupted
()
会返回 true,并重置线程的打断状态为 false,当再次调用时,除非线程在这之前又被打断了,否则该方法会返回 false
isInterrupted()
只是简单的查询,并不会重置打断状态。Object.wait()
和Object.notify()
/notifyAll()
- 在未达到⽬标时
wait()
- ⽤ while 循环检查
- 设置完成后
notifyAll()
wait()
和notify()
/notifyAll()
都需要放在同步代码块⾥
Thread.join()
:让另⼀个线程插在⾃⼰前⾯
如果代码执行流程如下Main1 → Main2 → A.start(){A1 → A2 → A3} → B.start(){B1 → B2 → B3} → A.join() → Main3
那么当执行到 A.join() 时 Main 线程会等待 A 线程执行完成再执行 Main3
Thread.yield()
:暂时让出⾃⼰的时间⽚给同优先级的线程
如果代码执行流程如下Main1 → Main2 → A.start(){A1 → A2 → A3} → B.start(){B1 → B.yield() → B3} → Main3
那么当 B 执行到 B.yield() 时,B 会短暂的让出自己的时间切片,给 A 和 Main 等与 B 同优先级的线程,当其中一个线程拿到时间片执行一个时间片的程序后,就会把时间片还给 B,B 然后继续执行 B3
- 作者:shuouyang
- 链接:https://notion-tree.vercel.app/article/6f96e77f-8b9e-4752-aa13-f47a13542e66
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。