2012-10-02 139 views
2

我有一個通過Executors.newFixedThreadPool()創建的Java線程池,我想使用守護進程線程。在Java線程池中使用守護進程線程不起作用

原因是這是一個GUI應用程序,我不希望這些線程導致程序在窗口關閉後繼續運行。

我實現了一個自定義ThreadFactory,它在它創建的線程上設置了Thread.setDaemon(true)

類是這樣的:

import java.util.concurrent.ThreadFactory; 

public class DaemonThreadFactory implements ThreadFactory{ 

    public Thread newThread(Runnable runnable){ 
     Thread thread = new Thread(); 
     thread.setDaemon(true); 
     return thread; 
    } 

} 

出於某種原因,當我使用DaemonThreadFactoryExecutors.newFixedThreadPool()關我排隊任務的執行。如果我將它改回到常規的ThreadFactory它可以工作。

我在做什麼錯?

回答

5

你沒有通過Runnable到線程,因此沒有代碼來執行:

@Override 
public Thread newThread(Runnable runnable) 
{ 
    Thread thread = new Thread(runnable); 
    thread.setDaemon(true); 
    return thread; 
} 
+0

您認真嗎?!?花了我多年的調試嘗試和解決這個問題... – ljbade

3

你忽略了Runnable傳遞給你哪個線程必須換行。

public Thread newThread(Runnable runnable) { 
    Thread thread = new Thread(runnable); 

否則,你正在創建線程,字面上什麼都不做。