2010-05-10 106 views
5

我想知道哪個是最有效的方法來實現java中的某種背景任務(我猜這會是某種非阻塞的線程)。更確切地說 - 我有一些java代碼,然後在某個時候我需要執行一個長時間運行的操作。我想要做的是在後臺執行該操作,以便該程序的其餘部分可以繼續執行,並在該任務完成時只更新某個特定的對象。這個改變會被其他組件檢測到。java後臺任務

回答

2
+1

是的,這是我正在尋找的,更具體的執行者,..謝謝。 – markovuksanovic 2010-05-10 20:23:41

+0

你可以提出一個關於執行者的回答嗎?我正要問一個非常類似的問題。我認爲應該提及執行者作爲具體答案。我會給它一個upvote。我不想回答點竊取。 特別是因爲JEE不鼓勵新線程的產生。 – Wes 2010-07-31 14:04:34

-1

天真的想法:你也許可以創建線程,給它一個低優先級,並做一個循環:

  • 使用產量或睡眠讓其他線程做的工作
  • 一點點在parrallel工作

這將取決於你真正想要在你的線程做

6

你想使一個新的線程;根據該方法需要多久是,你可以把它內聯:

// some code 
new Thread(new Runnable() { 
    @Override public void run() { 
     // do stuff in this thread 
    } 
}).start(); 

或者只是做一個新的類:

public class MyWorker extends Thread { 
    public void run() { 
     // do stuff in this thread 
    } 
} 

// some code 
new MyWorker().start(); 
+0

在這裏不可能長時間運行的線程會搶佔CPU而不會讓其他線程運行嗎? – phtrivier 2010-05-10 16:39:32

+0

在JEE中不鼓勵創建新的主題。 – Wes 2010-08-20 23:30:05

-1

是的,你會想離旋轉操作在它自己的線程上。如果您不小心並且意識到這意味着什麼以及資源如何相互作用,那麼添加新線程可能會有點危險。這是一個很好的introduction to threads來幫助你開始。

0

讓一個線程。將該線程標記爲守護進程。當運行的唯一線程都是守護進程線程時,JVM退出。