zoukankan      html  css  js  c++  java
  • 读写锁,await和signa

    package com.fh.interview;
    
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    /**
     *
     * 支持重入性,能够对共享资源重复加锁
     * 支持公平锁和非公平锁
     *
     * 公平锁:锁的获取顺序应该满足绝对的时间顺序,FIFO
     * @author5
     * @create 2018-06-02 下午1:24
     *
     *
     * 读写锁的介绍
     **/
    public class ReentrantLockDemo {
    
    
        private static Lock readLockock = new ReentrantReadWriteLock().readLock();
    
        private static Lock writeLock = new ReentrantReadWriteLock().writeLock();
    
    
        public static void main(String[] args) {
    
        }
    
    }
    package com.fh.interview;
    
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * @author
     * @create 2018-06-02 下午3:30
     **/
    public class AwaitSignal {
    
        private static ReentrantLock lock = new ReentrantLock();
    
        private static Condition condition = lock.newCondition();
    
        private static boolean flag = false;
    
        public static void main(String[] args) {
            Thread thread = new Thread(new Waiter());
            thread.start();
            try {
                Thread.sleep(3000);
            }catch (Exception e){
    
            }
    
            Thread thread1 = new Thread(new Signaler());
            thread1.start();
        }
    
    
        static class Waiter implements Runnable{
            @Override
            public void run() {
                lock.lock();
                try {
                    while (!flag){
                        System.out.println("条件不满足");
                        condition.await();
                    }
                    System.out.println("条件满足");
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    lock.unlock();
                }
            }
        }
    
        static class Signaler implements Runnable{
            @Override
            public void run() {
                lock.lock();
                try {
                    flag=true;
                    condition.signalAll();
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    lock.unlock();
                }
            }
        }
    }
  • 相关阅读:
    Vue3.0实战项目
    Vue 笔试题(做对九题即可成为前端懂王)
    CSS 响应式布局---Grid 布局
    CSS快速提升技巧(一)
    前端骨架屏
    Python学习29
    Python学习28
    Python学习27
    Python学习26
    Python学习25
  • 原文地址:https://www.cnblogs.com/nihaofenghao/p/9125592.html
Copyright © 2011-2022 走看看