我也可以通过增加线程池中的线程来手动测试执行.
他似乎对此并不满意.
任何人都可以告诉我们如何决定我们应该使用哪些最大线程以获得更好的性能.任何指南链接将不胜感激(在核心Java应用程序中)
解决方法
为获得最佳性能,线程数量应等于处理器核心数量(不要忘记使用-XmsYYYYM和-XmxYYYYM,如果没有它们,您可能会遇到处理器未将线程分配给核心的情况).
关于最大线程你的答案是正确的,这取决于硬件和操作系统.
在linux上可以检查:
cat /proc/sys/kernel/threads-max
编辑.
您可以使用Integer.MAX_VALUE创建线程池
但是你限制了最大线程使用量.
在我的笔记本上.命令“cat / proc / sys / kernel / threads-max”显示我126987.
我跑的代码:
package com.stackoverflow.test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestMaxAmountOfThreads { public static void main(String[] args) { ExecutorService serivce = Executors.newFixedThreadPool(Integer.MAX_VALUE); for (int i = 0; i < Integer.MAX_VALUE; i++) { serivce.submit(new Runnable() { public void run() { try { Thread.sleep(Integer.MAX_VALUE); } catch (InterruptedException e) { } } }); System.out.println(i); } } }
输出:
31850
Exception in thread “main” java.lang.OutOfMemoryError: unable to
create new native thread at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714) at
java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:949)
at
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1360)
at
java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:110)
at
com.stackoverflow.test.TestMaxAmountOfThreads.main(TestMaxAmountOfThreads.java:10)
所以我只能使用31850个线程,没有jvm调优.