Как можно запустить одновременно два потока (не дожидаясь завершения одного из них) на Java?
Самый простой вариант - просто создать и запустить потоки:
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 */ }
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей