Как запустить одновременно два потока?

340
23 марта 2017, 19:15

Как можно запустить одновременно два потока (не дожидаясь завершения одного из них) на Java?

Answer 1

Самый простой вариант - просто создать и запустить потоки:

public class Foo {
    public static void main(String[] args) {
        new Thread(Foo::foo).start();
        new Thread(() -> bar()).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                baz();
            }
        }).start();
    }
    static void foo() { /* долгая задача 1 */ }
    static void bar() { /* долгая задача 2 */ }
    static void baz() { /* долгая задача 3 */ }
}

Но в реальной жизни обычно так не делают.

Решение лучше и гибче - использовать пул потоков и отправлять в него задачи:

public class Foo {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService pool = Executors.newFixedThreadPool(3);
        pool.submit(Foo::foo);
        pool.submit(() -> bar());
        pool.submit(new Runnable() {
            @Override
            public void run() {
                baz();
            }
        });
    }
    static void foo() { /* долгая задача 1 */ }
    static void bar() { /* долгая задача 2 */ }
    static void baz() { /* долгая задача 3 */ }
}
READ ALSO
Как вывести изображения в селекте?

Как вывести изображения в селекте?

Как сделать селект с миниатюрами (маленькими изображениями) вместо текста? Попробовал несколько плагинов типа jquery-form-styler или nice-select, ни в том,...

445
Затенение фона модального окна Bootstrap

Затенение фона модального окна Bootstrap

Есть стандартное модальное окно Bootstrap, нужно оставить возможность блокировки контента(data-backdrop="true") но убрать затенение с фона при сохранении...

564