如何保证线程的执行顺序

Posted csong7876

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保证线程的执行顺序相关的知识,希望对你有一定的参考价值。

示例代码

static Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("Thread1");
}
});
static Thread t2 = new Thread(new Runnable() {
public void run() {
System.out.println("Thread2");
}
});
static Thread t3 = new Thread(new Runnable() {
public void run() {
System.out.println("Thread3");
}
});
1.使用join
public static void main(String[] args) throws InterruptedException {
t1.start();
t1.join();
t2.start();
t2.join();
t3.start();
}
join源码:
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;
            }
        }
    }
join让主线程等待,至子线程执行结束
2.使用ExecutorService
static ExecutorService es = Executors.newSingleThreadExecutor();
public static void main(String[] args) throws InterruptedException {
es.submit(t1);
es.submit(t2);
es.submit(t3);
es.shutdown();
}
ExecutorService 提供了4种线程池,分别是:
newCachedThreadPool;缓存线程池,可灵活回收、新建
newFixedThreadPool;定长线程池,可控制最大并发数,超出在队列中等待
newScheduledThreadPool;定长线程池,可定时、周期执行
newSingleThreadExecutor;单一线程池,按顺序执行(FIFO,LIFO,优先级)

以上是关于如何保证线程的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何保证线程按顺序执行

Jmeter--多个线程组顺序执行和并行执行

如何控制多线程执行顺序

Vb.net 多个线程执行顺序的问题

有三个线程T1 T2 T3,如何保证他们按顺序执行

MFC中如何让多线程按先后顺序执行,第一个来的先执行,以后按先后到达的顺序执行