Подтвердить что ты не робот

Создавать потоки в java для работы в фоновом режиме

Я хочу создать поток Java из моей основной Java-программы, и этот поток должен выполняться отдельно, не мешая основной программе. Вот как это должно быть:

  • Основная программа, инициированная пользователем.
  • Работает ли какой-нибудь бизнес и должен создать новый поток, который мог бы обрабатывать фоновый процесс.
  • Как только поток создается, основная программа не должна дожидаться завершения порожденного потока. На самом деле он должен быть бесшовным.
4b9b3361

Ответ 1

Один прямой способ - вручную вручную создать поток:

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
}

В качестве альтернативы, если вам нужно создать несколько потоков или вам нужно сделать это несколько раз, вы можете использовать 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
}

Ответ 2

Это еще один способ создания потока с использованием анонимного внутреннего класса.

    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();
        }
    }

Ответ 3

И если вы хотите сделать это на 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");
    }
}