三个线程,如何保证顺序执行执行?

1、join

package testSequential;

/**
 * @author ZDH
 * @version 1.0
 * @date 2023/3/28 15:31
 */
class TestJoin implements Runnable {
    String name;

    public TestJoin(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " is Running");
    }
}

public class methodAjoin {

    public static void main(String[] args) throws InterruptedException {
        Thread threadA = new Thread(new TestJoin("A"));
        Thread threadB = new Thread(new TestJoin("B"));
        Thread threadC = new Thread(new TestJoin("C"));

        threadA.start();
        threadA.join();//阻塞执行,执行完毕才进入下一步

        threadB.start();
        threadB.join();

        threadC.start();
        threadC.join();
    }
}

执行结果:

2、CountDownLatch

package testSequential;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


class worker implements Runnable {
    private String name;
    private CountDownLatch c1;
    private CountDownLatch c2;

    public worker(String name,CountDownLatch c1,CountDownLatch c2){
        this.name = name;
        this.c1 = c1;
        this.c2 = c2;
    }

    @Override
    public void run() {
        try {
            c1.await();
            System.out.println(this.name +" is running!");
            c2.countDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class methodBCountDownLatch {
    public static void main(String[] args) {
        CountDownLatch c1 = new CountDownLatch(0);
        CountDownLatch c2 = new CountDownLatch(1);
        CountDownLatch c3 = new CountDownLatch(1);

        Thread t1 = new Thread(new worker("A",c1,c2));
        Thread t2 = new Thread(new worker("B",c2,c3));
        Thread t3 = new Thread(new worker("C",c3,c3));

        t1.start();
        t2.start();
        t3.start();
    }
}

执行结果:

3、SingleThreadPool

package testSequential;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author ZDH
 * @version 1.0
 * @date 2023/3/28 15:50
 */
class SingleThread implements Runnable {
    private String name;

    public SingleThread(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(this.name + " is running");
    }
}

public class methodCSingleThreadPool {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();

        Thread threadA = new Thread(new SingleThread("A"));
        Thread threadB = new Thread(new SingleThread("B"));
        Thread threadC = new Thread(new SingleThread("C"));

        executorService.submit(threadA);
        executorService.submit(threadB);
        executorService.submit(threadC);

        executorService.shutdown();

    }
}

 执行结果:

4、CompletableFuture

package testSequential;

import java.util.concurrent.CompletableFuture;

public class methodDCompletableFuture {
    public static void main(String[] args) {
        Thread threadA = new Thread(new SingleThread("A"));
        Thread threadB = new Thread(new SingleThread("B"));
        Thread threadC = new Thread(new SingleThread("C"));
        CompletableFuture.runAsync(()->threadA.start()).thenRun(()->threadB.start()).thenRun(()->threadC.start());

    }
}

执行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值