Kri*_*hna 7 java multithreading
我一直在研究一个项目,在该项目中我的程序在执行期间创建了大约500个线程.我发现,一旦程序执行程序,我的PC就开始承担巨大的负担.在75%的线程完成工作后,它继续显示负载.我想知道工作完成的线程是否被杀死.java如何处理完成工作的线程.任何帮助......
我发现,一旦程序执行程序,我的PC就开始承担巨大的负担.在75%的线程完成工作后,它继续显示负载.
如果500个线程中的75%已经完成了他们的工作,那么剩下的100个线程将继续运行.如果使用大量的CPU,100个线程可以超过一个盒子上的处理器,我假设它没有100个核心.因此,您的应用程序可能会继续显示100%的CPU利用率,直到运行的线程数低于核心数.
您应该考虑使用固定大小的线程池而不是创建500个并发线程.然后,您将向线程池提交500个任务.这允许您选择要同时运行的适当数量的线程.适当数量的线程高度依赖于提交的任务.更多CPU绑定任务应该使用更少的线程,而IO绑定任务可以使用更多.在调整线程数的同时对应用程序执行一些测试运行是优化值的最佳方法.我倾向于从核心数量的2倍开始,然后从那里进行优化.
// create a thread pool with 10 workers
ExecutorService threadPool = Executors.newFixedThreadPool(10);
// define your jobs somehow
for (MyRunnable job : jobsToDo) {
threadPool.submit(job);
}
// once we have submitted all jobs to the thread pool, it should be shutdown
threadPool.shutdown();
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看ExecutorService教程.
我想知道工作完成的线程是否被杀死.java如何处理完成工作的线程.任何帮助......
线程最有可能完成.线程离开run()方法后(因为它返回或抛出异常)它将不再使用CPU,并且可以获取或重用其底层本机线程.如果没有对该Thread对象的引用,它的内存最终将由垃圾收集器获取.
| 归档时间: |
|
| 查看次数: |
1966 次 |
| 最近记录: |