假设您有一个程序启动两个线程a
和b
,并且b
启动另外10个线程。 a
是否获得了“关注”的一半,而b
及其线索分享另一半,还是他们都平等分享?如果默认情况下答案是后者,你怎么能达到前者?谢谢!线程内线程的优先级
回答
是否
a
收到可用“注意”的一半,而b
及其线程共享的另一半,还是他们都平等地分担?
都没有。每个线程收到的时间比例是未指定的,并且没有可靠的方法来在Java中进行控制。这取决于本地线程调度程序。
如果默认回答是后者,那么您如何实现前者?
你不能,可靠。
您必须影响每个线程运行的相对时间量的唯一因素是线程优先级。即使它们不可靠或不可预测。 javadoc简单地说高优先级的线程被执行“优先于”低优先级的线程。实际上,这取决于本地线程调度程序如何处理优先级。
欲了解更多详情:http://docs.oracle.com/javase/7/docs/technotes/guides/vm/thread-priorities.html ...其中包括有关如何在一系列平台和Java版本上的线程优先级信息。
关于此主题有很多不错的文档。其中一个是this。
创建Java线程时,它从创建它的线程继承它的优先级。您也可以使用setPriority()方法随时修改线程的优先级。线程优先级是范围在MIN_PRIORITY和MAX_PRIORITY之间的整数(在Thread类中定义的常量)。整数越高,优先级越高。在任何给定的时间,当多个线程准备好执行时,运行时系统选择具有最高优先级的“Runnable”线程来执行。只有当该线程停止,退出或由于某种原因变为“不可运行”时,才会开始执行较低优先级的线程。如果两个具有相同优先级的线程正在等待CPU,那么调度器会选择其中一个以循环方式运行。所选择的线程将运行,直到满足下列条件之一为真:
- 较高优先级的线程变为“可运行”。
- 它产生,或其run()方法退出。
- 在支持时间分片的系统上,其分配时间已过期。
在任何给定时间,最高优先级的线程正在运行。但是,这不能保证。线程调度器可以选择运行较低优先级的线程以避免饥饿。出于这个原因,为了提高效率,仅使用优先级来影响调度策略。 不要依赖线程优先级来保证算法的正确性。
+1,'不要依赖线程优先级为算法的正确性'。 – 2013-04-30 11:05:55
+1经典解释 – 2013-05-01 08:33:08
我们不能说线程将执行的顺序。线程调度程序按照我们无法改变的内置算法工作。线程调度程序从可运行池中选取任何线程(最高优先级线程)并使其运行。 我们只能提到调度程序应该处理我们的线程的优先级。
- 1. 线程优先级
- 2. 流程优先与线程优先级
- 3. Android的线程优先级
- 4. 线程优先级的Android
- 5. 更改线程优先级
- 6. 通过了解线程的优先级来设置线程的优先级
- 7. Java中的高优先级线程
- 8. 线程消息之间的优先级?
- 9. 线程的延迟优先级更改
- 10. 降低Task.Factory.StartNew线程的优先级
- 11. NSOperationQueue VS并行线程的优先级
- 12. ThreadPoolExecutor和Android的线程优先级
- 13. .NET Backgroundworker对象的线程优先级
- 14. 具有优先级设置的线程
- 15. 线程 - 优先级突发事件与优先级
- 16. 线程池中的C#低线程优先级
- 17. 线程同步和设置线程的优先级
- 18. 一个简单的线程在碳库++与线程优先级
- 19. 什么是UI线程的线程优先级?
- 20. Iphone线程优先
- 21. 优先化线程。
- 22. Java线程优先
- 23. 线程,优先级和放弃
- 24. C++线程网络优先级
- 25. 光标时钟和线程优先级
- 26. Windows和Linux线程优先级等价
- 27. 更改线程优先级 - Unity 3d
- 28. 更改线程优先级ERROR_INVALID_HANDLE
- 29. 线程安全优先级队列
- 30. 设置CoreData NSManagedObjectContext线程优先级
向下选民 - 你愿意解释吗? – 2013-04-30 13:16:58