如何使用三个线程顺序打印“A“,“B“,“C“

需要使用lock的Condition接口来实现三个线程顺序打印

* Lock
 * condition.await();
 * condition.signal();
 * condition.signalAll();
 * 和wait(), notify(), notifyALl() 功能差不多
 *    区别    notify唤醒
 *          signal唤醒某一把锁
 *
 */
class ShareData{
    //为何用Lock   Lock可以设置多把锁和多把钥匙 可以定向唤醒  Lockgood_demo
    private int number = 1;//a:1  b:2  c:3
    //synchronized重锁1.8前
    private Lock lock=new ReentrantLock();//ReentrantLock递归锁 非公平锁  新版的
    private Condition c1=lock.newCondition();//多把钥匙   多吧锁
    private Condition c2=lock.newCondition();
    private Condition c3=lock.newCondition();
    public  void printc1() {
        lock.lock();
        try{
            while (number!=1){c1.await();}//if可能有虚假唤醒//1.判断
            System.out.println(Thread.currentThread().getName()+"\t执行");//2.干活
            number=2;c2.signalAll(); //3.通知
        }catch (Exception e){e.printStackTrace();}finally {lock.unlock();}
    }
    public  void printc2() {
        lock.lock();
        try{
            while (number!=2){c2.await();}//if可能有虚假唤醒//1.判断
            System.out.println(Thread.currentThread().getName()+"\t执行");//2.干活
            number=3;c3.signalAll();//3.通知
        }catch (Exception e){e.printStackTrace();}finally {lock.unlock();}
    }
    public  void printc3() {
        lock.lock();
        try{
            while (number!=3){c3.await();}//if可能有虚假唤醒//1.判断
            System.out.println(Thread.currentThread().getName()+"\t执行");//2.干活
            number=1;c1.signalAll(); //3.通知
        }catch (Exception e){e.printStackTrace();}finally {lock.unlock();}
    }
}

public static void main(String[] args) {
        Lockgood_demo();
    }

    private static  void Lockgood_demo() {
        ShareData shareData=new ShareData();
        //顺序打印五遍A B C
        new Thread(()->{for (int i = 0; i < 5; i++) shareData.printc1();},"A").start();
        new Thread(()->{for (int i = 0; i < 5; i++) shareData.printc2();},"B").start();
        new Thread(()->{for (int i = 0; i < 5; i++) shareData.printc3();},"C").start();

    }   //精确唤醒某些线程  private Condition c1=lock.newCondition();//多把钥匙   多把锁

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧郁的叮当猫

Thanks♪(・ω・)ノ

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值