Java 爪哇,唐';不要等待线程完成

Java 爪哇,唐';不要等待线程完成,java,multithreading,Java,Multithreading,我需要找到一种从静态调用中剥离线程的方法,而不是等待线程完成。基本上,是一种“先开火,然后忘记”的方法。有人能给我举一个简单的例子来说明如何做到这一点吗 基本上启动线程,不执行连接。因此,您将不会等待线程完成。如果它是一个长寿命线程,其生命周期与您的应用程序本身类似,并且将花费大量时间等待其他线程: Thread t = new Thread(new YourClassThatImplementsRunnable()); t.start(); // JDK 8 new Thread(() -&

我需要找到一种从静态调用中剥离线程的方法,而不是等待线程完成。基本上,是一种“先开火,然后忘记”的方法。有人能给我举一个简单的例子来说明如何做到这一点吗

基本上启动线程,不执行连接。因此,您将不会等待线程完成。

如果它是一个长寿命线程,其生命周期与您的应用程序本身类似,并且将花费大量时间等待其他线程:

Thread t = new Thread(new YourClassThatImplementsRunnable());
t.start();

// JDK 8
new Thread(() -> methodYouWantToRun()).start();
new Thread(new yourLongRunningProcessThatImplementsRunnable()).start();
如果它是一个短暂的、CPU受限的任务:

ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors());
es.submit(new yourTaskThatImplementsRunnable());
尽管如此,在大多数情况下,您将向相同的
ExecutorService
提交许多任务

见:

根据任务的性质,可能会采用不同的方法:

(1) 正如许多人所提到的,临时任务的一种常见方法就是构造一个线程并调用它的start()方法

(2) 请记住,如果您的后台线程没有停止,那么默认情况下,它将阻止您的程序在其他线程完成后关闭。因此,可能需要在线程上调用setDaemon(true),这样它就不会有这种行为。(另一方面,在基于GUI的应用程序中,您通常只需调用System.exit(),理想情况下,您应该在长期运行的任务中嵌入一种干净的关闭方式。)


(3)如果你经常遇到“火忘”的短命任务,那么考虑使用java 5的可用性。

这基本上是线程的默认行为——这个线程是否需要在某个时刻发出调度线程或改变共享变量的状态?如果任务相对简单,可以使用线程的可运行构造函数(即新线程(new Runnable(){public void run(){…})),因为这样你就不会扩展复杂的类,而是实现一个接口,在字节码中应该更简单,并且不会与线程中的方法有任何名称冲突。
ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors());
es.submit(new yourTaskThatImplementsRunnable());