在java中创建线程以在后台运行

Sir*_*ish 30 java multithreading

我想从我的主java程序中生成一个Java线程,该线程应该单独执行而不会干扰主程序.这是应该如何:

  1. 主程序由用户发起
  2. 有些业务是否有效,应该创建一个可以处理后台进程的新线程
  3. 一旦创建了线程,主程序就不应该等到生成的线程完成.事实上它应该是无缝的..

ass*_*ias 77

一种直接的方法是自己手动生成线程:

public static void main(String[] args) {

     Runnable r = new Runnable() {
         public void run() {
             runYourBackgroundTaskHere();
         }
     };

     new Thread(r).start();
     //this line will execute immediately, not waiting for your task to complete
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要生成多个线程或需要重复执行,您可以使用更高级别的并发API和执行程序服务:

public static void main(String[] args) {

     Runnable r = new Runnable() {
         public void run() {
             runYourBackgroundTaskHere();
         }
     };

     ExecutorService executor = Executors.newCachedThreadPool();
     executor.submit(r);
     //this line will execute immediately, not waiting for your task to complete
}
Run Code Online (Sandbox Code Playgroud)


小智 7

这是使用匿名内部类创建线程的另一种方法.

    public class AnonThread {
        public static void main(String[] args) {
            System.out.println("Main thread");
            new Thread(new Runnable() {
                @Override
                public void run() {
                System.out.println("Inner Thread");
                }
            }).start();
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 7

而且,如果您喜欢使用Java 8方式,则可以像下面这样简单:

public class Java8Thread {

    public static void main(String[] args) {
        System.out.println("Main thread");
        new Thread(this::myBackgroundTask).start();
    }

    private void myBackgroundTask() {
        System.out.println("Inner Thread");
    }
}
Run Code Online (Sandbox Code Playgroud)


dev*_*ohn 6

更简单,使用 Lambda!(Java 8)是的,这确实有效,我很惊讶没有人提到它。

new Thread(() -> {
    //run background code here
}).start();
Run Code Online (Sandbox Code Playgroud)