• 闭锁CountDownLatch


    package concurrent._ReentrantLock;
    
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    //一个关于Lock的最基本操作,lock.lock()与lock.unlock()
    public class MyReentrantLock {
    
        private static Lock lock = new ReentrantLock();
        private static int count = 0;
        private static CountDownLatch countDownLatch = new CountDownLatch(3);
        public static void main(String[] args) throws InterruptedException {
            MyReentrantLock mylock = new MyReentrantLock();
    
            Thread a = new Thread("A"){
                @Override
                public void run() {
                    mylock.lockinsert(Thread.currentThread());
                }
            };
            a.start();
            Thread b = new Thread("B"){
                @Override
                public void run() {
                    mylock.lockinsert(Thread.currentThread());
                }
            };
            b.start();
            Thread c = new Thread("C"){
                @Override
                public void run() {
                    mylock.lockinsert(Thread.currentThread());
                }
            };
            c.start();
    
            //等待三个线程结束后输出count的值,可以使用一个闭锁
            //Thread.sleep(1000);
            System.out.println("等待三个线程结束");
            countDownLatch.await();
            System.out.println(count);
            
    
    
    
        }
    
        public void lockinsert(Thread thread){
            lock.lock();
            //线程如果没有获得锁,就会阻塞在此处,获得锁之后才能后续操作
    
            try{
                System.out.println("线程" + thread.currentThread().getName() + "获得了锁");
    
                for(int i = 0 ; i < 1000 ; i ++){
                    count++;
                }
    
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                System.out.println("线程" + thread.currentThread().getName() + "释放了锁");
    
                lock.unlock();
                countDownLatch.countDown();
            }
        }
    
    
    
    }

    结果显示;

    线程A获得了锁
    线程A释放了锁
    等待三个线程结束
    线程C获得了锁
    线程C释放了锁
    线程B获得了锁
    线程B释放了锁
    3000

    闭锁只能用一次

  • 相关阅读:
    DOCK-SWARM
    springMVC上传和下载文件
    生成任意内容任意类型的文件
    配置监听(系统启动和关闭时运行的程序)
    配置过滤器
    读取文件内容(TXT之类的文件)
    读取properties文件中的内容
    时间戳转时间字符串和时间
    启动Service的时候报错unable to install breakpoint in
    java后台调用接口并获取返回值
  • 原文地址:https://www.cnblogs.com/da-peng/p/10023015.html
Copyright © 2020-2023  润新知