我是新來的這個併發編程在Java中,並提出了以下情況下,我越來越混亂使用時。
方案1:在下面的代碼我試圖通過調用。開始()上GPSService類,這是一個Runnable實施運行的線程。在Java中同時運行線程中ExecutorService的執行和thread.run之間的區別是什麼?
int clientNumber = 0;
ServerSocket listener = new ServerSocket(port);
while (true) {
new GPSService(listener.accept(), clientNumber++, serverUrl).start();
}
方案2:在下面的代碼,我嘗試使用的ExecutorService類運行的線程,如圖
int clientNumber = 0;
ServerSocket listener = new ServerSocket(port);
while(true) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new GPSService(listener.accept(), client++, serverUrl));
executor.shutdown();
while (!executor.awaitTermination(1, TimeUnit.SECONDS)) {
// Threads are still running
System.out.println("Thread is still running");
}
// All threads are completed
System.out.println("\nThread completed it's execution and terminated successfully\n");
}
我的問題是
這是調用線程的最佳實踐併發編程?
什麼是結果(麻煩)當我第一次或第二次使用時,我會最終結束?
注意:我一直在面對第一種情況,即每隔幾天後程序被吊死的問題。那麼,當我使用第一種方法時,這個問題是否與預期相關?
任何好的/有益的答案將不勝感激:)謝謝
可能重複http://stackoverflow.com/questions/2049948/thread-pool-vs-thread -spawning) –
@NarendraPathai我更具體到我的問題,如果是的話,你怎麼能把它標記爲重複? –
@NarendraPathai我剛剛提到過,只是爲了澄清FirstScenario是否有可能導致此類問題。爲了您的理解,我沒有要求解決這個懸而未決的問題。並感謝您的參考 –