多线程交替执行

复制代码
     static  int num=1;
    static  void  test3() throws  InterruptedException{
            Lock lock=new ReentrantLock(true);
            Condition conditionLock1=lock.newCondition();
            Condition conditionLock2=lock.newCondition();
            Condition conditionLock3=lock.newCondition();
            Thread thread1=new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while (true) {
                            lock.lock();
                            System.out.println("1");
                           //Thread.sleep(1000);
                            if (num!=1) {
                                conditionLock1.await();
                            }
                            num=2;
                            conditionLock2.signal();
                            lock.unlock();
                        }

                    }catch (Exception e){

                    }

                }
            });
            Thread thread2=new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while (true) {
                            lock.lock();
                            System.out.println("2");
                           //Thread.sleep(2000);
                            if (num!=2) {
                                conditionLock2.await();
                            }
                            num=3;
                           conditionLock3.signal();
                           lock.unlock();
                        }
                    }catch (Exception e){

                    }

                }
            });


            Thread thread3=new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while (true) {
                            lock.lock();
                            System.out.println("3");
                                //Thread.sleep(3000);
                            if (num!=3) {
                                conditionLock3.await();
                            }
                            num=1;
                            conditionLock1.signal();
                           lock.unlock();
                        }
                    }catch (Exception e){

                    }
                }
            });
            thread2.start();
            thread1.start();
            thread3.start();
        }
复制代码

执行结果为: 1,2,3,1,2,3````

 

posted @   甜菜波波  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示