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 许可协议,转载请注明出处。







