参考博客:保证多线程顺序执行,四种方案,你知道几种?
常规操作-启动三个线程执行
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("线程1"); } });
Thread thread2 = new Thread(new Runnable() { @Override public void run() { System.out.println("线程2"); } });
Thread thread3 = new Thread(new Runnable() { @Override public void run() { System.out.println("线程3"); } });
thread.start(); thread2.start(); thread3.start(); }
|
控制台
方案一
join()方法
使用join()
方法改进后代码
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("线程1"); } });
Thread thread2 = new Thread(new Runnable() { @Override public void run() {
try { thread.join(); } catch (InterruptedException e) { throw new RuntimeException(e); }
System.out.println("线程2"); } });
Thread thread3 = new Thread(new Runnable() { @Override public void run() {
try { thread2.join(); } catch (InterruptedException e) { throw new RuntimeException(e); }
System.out.println("线程3"); } });
thread.start(); thread2.start(); thread3.start();
}
|
控制台
方案二
CountDownLatch
方案三
单线程池
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("线程1"); } });
Thread thread2 = new Thread(new Runnable() { @Override public void run() {
try { thread.join(); } catch (InterruptedException e) { throw new RuntimeException(e); }
System.out.println("线程2"); } });
Thread thread3 = new Thread(new Runnable() { @Override public void run() {
try { thread2.join(); } catch (InterruptedException e) { throw new RuntimeException(e); }
System.out.println("线程3"); } });
ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.submit(thread); executorService.submit(thread2); executorService.submit(thread3);
executorService.shutdown();
}
|
控制台
方案四
CompletableFuture
public static void main(String[] args) {
Thread t1 = new Thread(new Work(),"线程1"); Thread t2 = new Thread(new Work(),"线程2"); Thread t3 = new Thread(new Work(),"线程3");
CompletableFuture.runAsync(()->t1.start()).thenRun(()->t2.start()).thenRun(()->t3.start());
}
static class Work implements Runnable{ @Override public void run() { System.out.println("执行"+Thread.currentThread().getName()); } }
|
控制台