我需要找到一种从静态调用中剥离线程的方法,而不是等待线程完成。基本上,一种“即发即忘”的方法。有人能为我提供一个如何实现这一目标的简单例子吗?
答案 0 :(得分:27)
Thread t = new Thread(new YourClassThatImplementsRunnable());
t.start();
// JDK 8
new Thread(() -> methodYouWantToRun()).start();
答案 1 :(得分:9)
如果它是一个长期存在的线程,它与你的应用程序本身具有相似的生命周期,并且将花费大量时间等待其他线程:
new Thread(new yourLongRunningProcessThatImplementsRunnable()).start();
如果这是一个短命的,受CPU限制的任务:
ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors());
es.submit(new yourTaskThatImplementsRunnable());
尽管如此,在大多数情况下,您会向同一个ExecutorService
提交一些任务。
答案 2 :(得分:7)
public static void foo() {
new Thread() {
public void run() {
//do something here....
}
}.start();
}
答案 3 :(得分:5)
根据任务的性质,可能会有不同的方式:
(1)正如许多人所提到的,偶然任务的一种常见方法是构造一个线程并调用其start()方法。
(2)请记住,如果后台线程没有停止,那么默认情况下它会阻止程序在其他线程完成时关闭。您可能因此想要在线程上调用setDaemon(true),以便它不具有此行为。 (另一方面,在基于GUI的应用程序中,您通常最终只是调用System.exit(),理想情况下,您可以通过 clean 方式关闭长期运行的任务。 。)
(3)如果您经常有短暂的任务来“发射并忘记”,那么请考虑使用Java 5中提供的Executors framework。
答案 4 :(得分:2)
基本上启动线程并且不执行连接。所以你不会等待线程完成。