Jos*_*Fox 5 java multithreading
线程A,B,C按此顺序,在单个对象中到达同步方法f().
所有人都有同样的优先权.
B和C被阻止.
叶子f().
什么线程现在开始在f()中运行?在FIFO的原则上它总是B吗?或者订单未定?
如果C的优先级高于B,那是否可以保证C运行而不是B?
据我所知,这是未定义的.
好的,也是.如果您正在编写依赖于优先级的编码来确定执行顺序,那么您做错了.你可以明确地和有意地控制这些东西,或者为发生的事情做好准备.最好是编写无论如何都能工作的代码.
优先级是运行时调度程序的提示,而不是硬性和快速指令.完全忽略您的优先级是可能的,也是合法的,或者按照与优先级无关的顺序安排线程.您可以期待的最好的是,平均而言,优先级较高的线程比优先级较低的线程获得更多的CPU时间,其他情况如IO等待允许.
顺序未定义。拥有更高的优先级并不能保证首先恢复。较高的优先级意味着线程在运行时获得更多的 CPU 时间,但不需要实现首先为其提供锁。
顺便说一句,没有办法编写确定性代码来保证您描述的 ABC 锁条目顺序。使用 Java 方法无法完成此操作。如果您编写的代码认为可以可靠地产生该排序,那么您还没有对其进行足够的测试。由于您无法知道线程将按什么顺序进入锁,因此您也无法知道它们离开锁的顺序 - 即使有 FIFO 策略。
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |