A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class LockConditionDemo
{
        public static void main(String[] args)
        {
                Commander c = new Commander();

                SoldierA  a = new SoldierA(c);
                SoldierB  b = new SoldierB(c);

                Thread t1 = new Thread(a);
                Thread t2 = new Thread(a);
                Thread t3 = new Thread(b);
                Thread t4 = new Thread(b);
                t1.start();
                t2.start();
                t3.start();
                t4.start();

        }
}

class Commander
{
        String name  ;
        int day = 1;
        boolean flag = false ;
        Lock lock = new ReentrantLock();
        Condition A = lock.newCondition();//就这里,java中怎么实现的,求解释
        Condition B = lock.newCondition();
       
        public  void Awork(String name)throws InterruptedException
        {       
                Lock.lock();
                        try
                        {
                                while(flag)
                                B.await();
                                this.name = name+"---"+day++;
                                System.out.println(Thread.currentThread().getName()+"--上半夜站岗--"+this.name);
                                flag = false ;
                                A.signal();
                        }
                        finally
                        {
                                lock.unlock()
                        }
                       
        }
        public void Bwork(String name)throws InterruptedException
        {
               
               
                        try
                        {
                                while(!flag)
                                B.await();
                                this.name = name+"---"+day++;
                                System.out.println(Thread.currentThread().getName()+"------下半夜站岗------"+this.name);
                                flag = false ;
                                A.signal();
                        }
                        finally
                        {
                                lock.unlock()
                        }
               
        }
}

class SoldierA implements Runnable
{
        private Commander com;
        SoldierA(Commander com)
        {
                this.com = com ;
        }
        public void run()
        {
                while (true)
                {
                        try
                        {
                                com.Awork("小强");
                        }
                        catch (InterruptedException e)
                        {
                        }
                }
               
        }
               
}

class SoldierB implements Runnable
{
        private Commander com;
        SoldierB(Commander com)
        {
                this.com = com ;
        }
        public void run()
        {
                wwhile (true)
                {
                        try
                        {
                                com.Bwork("大黄");
                        }
                        catch (InterruptedException e)
                        {
                        }
                }
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
吴光新 + 1 淡定

查看全部评分

9 个回复

倒序浏览
求知道的哥们解释下,感谢~~~
回复 使用道具 举报
是通过Lock调用 newCondition()方法, 返回绑定到此 Lock 实例的新 Condition 实例。

评分

参与人数 1技术分 +1 收起 理由
吴光新 + 1 很给力!

查看全部评分

回复 使用道具 举报
学习学习!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
哥 关键就是condition实例 我就是不明白condition实例到底是怎么回事 接口不能实例化的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马