我是新来的这个并发编程在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是否有可能导致此类问题。为了您的理解,我没有要求解决这个悬而未决的问题。并感谢您的参考 –