您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 3浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java并发多线程编程——锁绑定多个条件Condition示例

小志的博客 发布时间:2022-01-18 22:18:31 ,浏览量:3

目录
    • 一、锁绑定多个条件Condition概述
    • 二、锁绑定多个条件Condition示例代码

一、锁绑定多个条件Condition概述
  • ReentrantLock 用来实现分组唤醒需要唤醒的线程,可以精确唤醒,而不是像synchronized 要么随机唤醒一个线程,要么唤醒全部线程。
二、锁绑定多个条件Condition示例代码
  • 示例需求

    示例需求:
    多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下:
    A线程 打印1次,  B线程 打印2次,  C线程 打印3次,
    紧接着
    A线程 打印1次,  B线程 打印2次,  C线程 打印3次,
    。。。。
    一共遍历3次
    
  • 示例代码

    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    /**
     *  @description:  1、lock有什么好处?
     *                   锁绑定多个条件Condition:即实现分组唤醒需要唤醒的线程,可以精确唤醒,而不是像synchronized 要么随机唤醒一个线程,要么唤醒全部线程。
     *                 2、示例需求:
     *                   多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下:
     *                   A线程 打印1次,  B线程 打印2次,  C线程 打印3次,
     *                   紧接着
     *                   A线程 打印1次,  B线程 打印2次,  C线程 打印3次,
     *                   。。。。
     *                   一共遍历3次
     * @author: xz
     */
    class MyResource{
        private int number =1;//A线程用1表示,B线程用2表示,C线程用3表示
    
        private Lock lock=new ReentrantLock();
        private Condition c1=lock.newCondition();
        private Condition c2=lock.newCondition();
        private Condition c3=lock.newCondition();
    
        public void print1(){
            lock.lock();
            try {
                //1、判断!=1,说明A线程不输出,等待
                while(number !=1){
                    c1.await();
                }
                //2、A线程输出1次
                for(int i=1;i            
关注
打赏
1661269038
查看更多评论
0.0926s