Java 里调用 notify()后,当前线程会立刻放弃继续执行吗(哪怕分配给当前线程的时间片没用完)?

2020-04-27 14:33:01 +08:00
 jiangwenjie
3312 次点击
所在节点    Java
9 条回复
pursuer
2020-04-27 14:47:26 +08:00
我印象中 notify 好像是唤醒等待线程用的,好像和放弃执行没有关系,而且时间片级别的操作大多依赖操作系统对线程调度的实现,不过如果线程进入等待的话理应可以立即放弃时间片的
yjxjn
2020-04-27 14:58:45 +08:00
@pursuer 你们工作中用多线程的地方多吗?
guyeu
2020-04-27 15:01:47 +08:00
notify 是唤醒一个正在等待的线程。。当前线程为什么要放弃执行。。。我猜你想要 join ?
sudden
2020-04-27 17:09:00 +08:00
是在离开同步代码块之后,才会放弃执行。也就是 synchronized 结束或者 unlock() 之后。
lanterboy
2020-04-27 17:27:42 +08:00
楼主是想说 yield() 吧
776491381
2020-04-27 17:32:36 +08:00
notify 和楼主说的好像关系不大,notify 会从等待队列中随机选取一个放入到同步队列中,notify 的时候不会放锁的,会继续执行,执行到 cpu 时间片用完被调度,直到退出同步
daozhihun
2020-04-27 17:41:35 +08:00
你不会把 java 当成 node js 那样单线程执行的吧?
pursuer
2020-04-27 18:08:16 +08:00
@yjxjn #2 我工作不是用 Java 的,只是自己做的一些工具是用 Java,因为不能堵塞 UI 线程,涉及网络,文件等耗时操作都会用到多线程
useben
2020-04-27 18:35:03 +08:00
notify 用于唤醒睡眠等待状态的线程, 而且并不是马上执行的, 而是转换为可被调度状态, 等待 cpu 的调度. 调用 notify 的本线程该吃吃该喝喝

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX