我刚接触Java中的并发编程,并遇到以下情况,不知道应该在哪里使用哪个方法。
场景1:以下代码中,我试图通过调用GPSService类上的.start()方法来运行线程,该类是Runnable接口的实现。
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");
}
我的问题是:
在并发编程中,触发线程的最佳实践是什么?
如果我使用第一种或第二种方法,将会得到什么结果(麻烦)?
注意:我在第一种情况下遇到了一个问题,程序在几天后就会卡死。那么,当我使用第一种方法时,这个问题是否相关/预期出现?
任何好的/有帮助的答案都将不胜感激 :) 谢谢