是否真的不希望创建10个以上的附加线程? 示例:Java多线程(10或更多?)
for(int i=0; i<100; i++) {
new Thread() {
public void run() {
// something
}
}.start();
}
将创建并启动100个线程。那不好,对吧?
更新>每个线程正在下载东西,把它放入包
是否真的不希望创建10个以上的附加线程? 示例:Java多线程(10或更多?)
for(int i=0; i<100; i++) {
new Thread() {
public void run() {
// something
}
}.start();
}
将创建并启动100个线程。那不好,对吧?
更新>每个线程正在下载东西,把它放入包
创建比您需要的更多线程是不可取的。
当然,如果你需要100个线程,那么这是一个很好的数字来创建。
不知道从哪里得到it is undesirable to create more than 10 additional threads
。 Java进程可以处理10,000个线程。
我认为java进程可以处理多个10,000线程,我不认为这取决于java进程http://stackoverflow.com/questions/763579/how-many-threads-can-a-java-vm-support – 2012-08-06 14:01:37
我发现即使进程限制为300K,Java进程也会得到大约32K的限制。 10,000的数量是它经常被认为值得尝试减少你拥有的线程数量的地方(或者使用更多的机器) – 2012-08-06 14:03:47
@PeterLawrey哈哈 - 上次我试图看看我会在哪里创建OutOfMemoryException来创建太多的线程,我在Windows 7 +硬重新启动时出现了黑屏;-) – assylias 2012-08-06 20:53:22
完全取决于上下文。如果大多数你正在做的工作是cpu绑定,那么除非你实际上有100个内核,否则可能不会造成太大的变化,或者实际上会让事情变得更糟(上下文切换等)。如果I/O任务耗费大量时间,那么线程化可能是有益的。你真的需要做一些基准测试。
你可能想要的是一个ThreadPool而不是创建这么多的线程。
例如:
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(YourRunnable);
看起来更进线程池 - 他们会让你的生活更轻松。
答案所依赖的关键部分是您对“不良”的定义。 – dasblinkenlight 2012-08-06 13:38:34
有时候这是可取的。例如,我在其中一个应用程序中创建了超过50个线程来存档最大的CPU利用率和性能。 – gkuzmin 2012-08-06 13:39:01
这取决于你想要做什么.. – 2012-08-06 13:39:15