whe*_*els 6 java concurrency multithreading
假设你有启动两个线程的程序a和b,并b开始了自己的另外十个线程.是否a会获得一半可用的"注意力"而b它的线程共享另一半,或者它们是否共享?如果答案是默认的后者,你怎么能实现前者?谢谢!
关于这个主题有很多很好的文档.其中之一就是这个.
创建Java线程时,它会从创建它的线程继承其优先级.您还可以使用setPriority()方法在创建线程后随时修改线程的优先级.线程优先级是MIN_PRIORITY和MAX_PRIORITY(Thread类中定义的常量)之间的整数.整数越高,优先级越高.在任何给定时间,当准备好执行多个线程时,运行时系统选择具有最高优先级的"Runnable"线程来执行.只有当该线程因某种原因停止,产生或变为"不可运行"时,优先级较低的线程才会开始执行.如果两个具有相同优先级的线程正在等待CPU,则调度程序选择其中一个以循环方式运行.选定的线程将运行,直到满足下列条件之一:
在任何给定时间,最高优先级的线程正在运行.但是,这不能保证.线程调度程序可以选择运行较低优先级的线程以避免饥饿.因此,出于效率目的,仅将优先级用于影响调度策略.不要依赖线程优先级来保证算法的正确性.
是否
a收到一半的可用“注意力”,b而其线程共享另一半,或者它们都平等共享?
两者都不。每个线程接收的时间比例是未指定的,并且在Java中没有可靠的方法来控制它。这取决于本机线程调度程序。
如果默认答案是后者,那么如何实现前者呢?
你不能,可靠地。
唯一需要影响每个线程运行的相对时间的是线程优先级。即使它们也是不可靠或可预测的。javadoc 只是说高优先级线程“优先于”低优先级线程执行。实际上,这取决于本机线程调度程序如何处理优先级。
有关更多详细信息:http://docs.oracle.com/javase/7/docs/technotes/guides/vm/thread-priorities.html ...其中包括有关一系列平台和 Java 版本上的线程优先级的信息。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |