美文网首页
锁绑定多个条件condition

锁绑定多个条件condition

作者: 酷酷的美猴王 | 来源:发表于2022-06-16 16:39 被阅读0次
    class ShareResource {
    
        private Integer number = 1;
        private Lock lock = new ReentrantLock();
        private Condition c1 = lock.newCondition();
        private Condition c2 = lock.newCondition();
        private Condition c3 = lock.newCondition();
    
        public void print5() {
            lock.lock();
            try {
                while (number != 1) {
                    c1.await();
                }
                for (int i = 1; i <= 5; i++) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
                number = 2;
                c2.signal();
            } catch (Exception e) {
            } finally {
                lock.unlock();
            }
        }
    
        public void print10() {
            lock.lock();
            try {
                while (number != 2) {
                    c2.await();
                }
                for (int i = 1; i <= 10; i++) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
                number = 3;
                c3.signal();
            } catch (Exception e) {
            } finally {
                lock.unlock();
            }
        }
    
        public void print15() {
            lock.lock();
            try {
                while (number != 3) {
                    c3.await();
                }
                for (int i = 1; i <= 15; i++) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
                number = 1;
                c1.signal();
            } catch (Exception e) {
            } finally {
                lock.unlock();
            }
        }
    
        public static void main(String[] args) {
            ShareResource shareResource = new ShareResource();
    
            new Thread(() -> {
                for (int i = 0; i < 10; i++) {
                    shareResource.print5();
                }
            }, "A").start();
    
            new Thread(() -> {
                for (int i = 0; i < 10; i++) {
                    shareResource.print10();
                }
            }, "B").start();
    
            new Thread(() -> {
                for (int i = 0; i < 10; i++) {
                    shareResource.print15();
                }
            }, "C").start();
        }
    

    相关文章

      网友评论

          本文标题:锁绑定多个条件condition

          本文链接:https://www.haomeiwen.com/subject/kueqvrtx.html