如何保证线程的执行顺序
程序员文章站
2022-05-05 21:46:29
...
如题,如何保证线程的执行顺序?
方案一
public class ThreadOrder {
static Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread1");
}
});
static Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread2");
}
});
static Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread3");
}
});
public static void main(String[] args) throws InterruptedException {
thread1.start();
// join()方法,让主线程阻塞
thread1.join();
thread2.start();
thread2.join();
thread3.start();
thread3.join();
}
}
java.lang.Thread#join(long)的实现
public final void join() throws InterruptedException {
join(0); // 这里时间设置为0毫秒
}
public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
方案二
public class ThreadOrder {
...
// 利用只有一个线程的线程池,按顺序执行thread1 -> thread2 -> thread3
static ExecutorService executorService = Executors.newSingleThreadExecutor();
public static void main(String[] args) throws InterruptedException {
executorService.submit(thread1); // 1、执行thread1
executorService.submit(thread2); // 2、执行thread2
executorService.submit(thread3); // 3、执行thread3
executorService.shutdown();
}
}
执行结果:
勘误或支持:由于水平有限,编写时间仓促,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。有任何的意见或建议,可在评论区留言,共同讨论。
上一篇: 如何改变 Python 中线程的执行顺序
下一篇: 如何控制线程执行的顺序?