我可以知道JVM处理线程调度吗? JVM如何处理未使用的线程(即,未处于运行状态的线程)。过多的未使用线程是否会对JVM造成负担?
答案 0 :(得分:1)
这是一个开放性问题,但我给您简要介绍一下。
Java一直都有语言中的线程概念。有时,这些映射到OS线程,但是,在OS不支持它们的地方(例如Windows 95),JVM可以实现自己的称为绿色线程的线程层。今天,您可以忽略绿色线程,因此操作系统可以处理最低级别的JVM线程调度。
但是,所有Java线程都具有与之关联的优先级,这使您可以向JVM和OS发出信号,在调度方面,您认为哪个线程比其他线程更重要。这是Thread类的属性,可通过getPriority / setPriority访问。关于如何根据安全策略和最大线程优先级更改此值,存在一些规则。由于平台实现线程调度的方式不同,因此不建议更改线程优先级以实现特定的应用程序行为。
Java和JVM不保证何时安排线程。在争夺处理资源时,通常优先于优先级较低的线程执行优先级较高的线程。重要的是,这不能保证最高优先级的线程将始终运行。不应使用(或依赖)线程优先级来实现互斥。
未使用的线程将像其他任何对象一样被垃圾回收。因为线程是重量级的对象,所以创建和删除这些对象很费时间,所以打算使用大量短期线程的应用程序通常会实现某种类型的线程池。由于链接到底层OS线程,因此太多线程会给JVM造成负担,比其他对象更多。
有关Java线程和并发的更多详细信息,我建议阅读Brian Goetz的出色著作“实践中的Java并发”。