Java,不要等待线程完成

时间:2009-05-19 14:58:46

标签: java multithreading

我需要找到一种从静态调用中剥离线程的方法,而不是等待线程完成。基本上,一种“即发即忘”的方法。有人能为我提供一个如何实现这一目标的简单例子吗?

5 个答案:

答案 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)

基本上启动线程并且不执行连接。所以你不会等待线程完成。