是否真的不希望創建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