2014-04-25 49 views
0

我嘗試了學習線程並在java中運行,我的一個同事告訴我停止它將需要太學習這些細節。只需查找如何編寫執行程序即可。這在java中如何工作。有人可以提供一個例子嗎?執行器服務在java中爲多線程,忽略線程的細節?

謝謝!

+0

它總是更好地知道你在抽象什麼。 – TheLostMind

+0

如果您不知道自己在做什麼,執行程序不會阻止您收到併發問題。 – Stephan

+0

學習線程和runnable肯定會幫助您理解執行程序的基本概念 – Sanjeev

回答

0

要解決編程中的小而孤立的問題,而沒有更大的項目背後,您可以直接瞭解執行程序。這裏是一個如何使用Threads pools with the Executor Framework的例子,它適合作爲入口點。但是,如果您打算在併發是重要主題的環境中工作得更多,那麼深入瞭解更高級別概念背後的基礎知識至關重要。通過對幕後發生的事情的深入瞭解,您將能夠快速判斷出針對性能和可擴展性問題的最佳解決方案。 沒有這種理解,你編寫的代碼將做你想做的事情,但是如果它適用於你沒有測試的稍微不同的場景,那麼很可能你的代碼表現很差,甚至可能因爲性能降低。併發是一個複雜的話題,如果沒有很好的理解,解決方案的概念就不能很好地運用。

話雖如此,我強烈建議同時學習Threads和Runnable。

+0

在我目前的組織中,關於發佈軟件的新版本和商業夥伴的全部內容都運行在展會上。所以我有一個需要8個小時的批處理應用程序,他們想要的SLA需要4個小時。它的單線程。你能給我一個關於執行器框架如何使用的簡單例子嗎? –

+0

@TazMan,我很瞭解你的情況。我已經添加了一個示例鏈接,可以讓您瞭解要做什麼。 –

+0

所以execute()方法將成爲我的主要人員,它會對工作單元進行多線程處理? –

0

這是一個容易理解的執行遺囑執行人,將在最大運行三類在一起:

ExecutorService executorService = Executors.newFixedThreadPool(3); 
Callable<Void> thread1 = new MyClass(); 
executorService.submit(thread1); 
Callable<Void> thread2 = new MyClass2(); 
executorService.submit(thread2);     
executorService.shutdown(); 

和類:

public class MyClass implements Callable<Void> { 
@Override 
public Void call() throws Exception{ } 
} 

這是你不真正需要對於基本的東西深入的知識只是記住,如果你的類正在訪問共享資源的衝突的可能性,那麼你需要有一個適當的線程執行鎖定等。