假设您有一个程序启动两个线程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. 更改线程优先级
- 5. 通过了解线程的优先级来设置线程的优先级
- 6. .NET Backgroundworker对象的线程优先级
- 7. 线程消息之间的优先级?
- 8. 降低Task.Factory.StartNew线程的优先级
- 9. NSOperationQueue VS并行线程的优先级
- 10. Java中的高优先级线程
- 11. 什么是UI线程的线程优先级?
- 12. 一个简单的线程在碳库++与线程优先级
- 13. 线程池中的C#低线程优先级
- 14. Iphone线程优先
- 15. 更改线程优先级ERROR_INVALID_HANDLE
- 16. C++线程网络优先级
- 17. 线程,优先级和放弃
- 18. 设置CoreData NSManagedObjectContext线程优先级
- 19. 并行线程与实时优先级
- 20. Windows和Linux线程优先级等价
- 21. 聚合线程和线程优先级(java)
- 22. 线程运行后快速更改线程qualityOfService /优先级
- 23. 是nice()用来改变线程优先级还是进程优先级?
- 24. 为什么新线程中getPriority的优先级与调用线程中的优先级不同?
- 25. 线程优先与posix
- 26. C#:BackgroundWorker线程优先
- 27. 使用java的应用程序的线程优先级
- 28. 降低Maven构建线程/进程的优先级
- 29. Java中的守护进程和非守护线程优先级
- 30. 如何更改侦听程序线程优先级
向下选民 - 你愿意解释吗? – 2013-04-30 13:16:58