java多线程笔记--顺序执行

java多线程笔记–多线程顺序执行文章目录java多线程笔记--多线程顺序执行1.java多线程笔记--顺序执行2.java多线程笔记--循环顺序打印问题2.1通过Lock、3个Condition的等待唤醒机制和状态变量判断,来控制3个线程输出顺序2.2通过Lock和状态变量判断,来控制3个线程输出顺序2.3通过3个信号量,每个信号量的最大许可为1,来控制3个输出顺序2.4通过Atomic原子自...
摘要由CSDN通过智能技术生成

java多线程笔记–多线程顺序执行


参考: https://www.cnblogs.com/xiaoxi/p/8035725.html

https://blog.csdn.net/hefenglian/article/details/82596072

https://blog.csdn.net/Evankaka/article/details/80800081

1.java多线程笔记–顺序执行

1.使用join
如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B
2.使用CountDownLatch
await方法阻塞当前线程,当CountDownLatch减为0时就代表条件已成熟,所有因调用await方法而阻塞的线程都会被唤醒
3.使用阻塞队列,利用队列的FIFO特性
4.使用newSingleThreadExecutor内部,线程池的newSingleThreadExecutor内部使用一个容量不限的阻塞队列,同3类似

2.java多线程笔记–循环顺序打印问题

解决:3个线程1、2、3依次执行打印ABC,但是实际处理的时候不一定先执行线程1打印A,具体跟判断逻辑有关,比如先执行了线程3,但是run中判断满足条件才输出。

2.1通过Lock、3个Condition的等待唤醒机制和状态变量判断,来控制3个线程输出顺序
public class PrintABCByLockAndCondition {
    private static Lock lock = new ReentrantLock();
    private static Condition conditionA = lock.newCondition();
    private static Condition conditionB = lock.newCondition();
    private static Condition conditionC = lock.newCondition();
    private static int status = 0;

    public static void main(String[] args) {
        new PrintABCByLockAndCondition().printABC();
    }

    public void printABC() {
        ExecutorService service = Executors.newFixedThreadPool(3);
        //线程的执行顺序跟提交顺序无关
        service.execute(new RunnableC());
        service.execute(new RunnableB());
        service.execute(new RunnableA());
        service.shutdown();
    }

    private class RunnableA implements Runnable {
        @Override
        public void run() {
            try {
                lock.lock();
                while (true) {
                    while (status % 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值