zoukankan      html  css  js  c++  java
  • 闭锁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

    闭锁只能用一次

  • 相关阅读:
    String类的substring方法
    postman绕过登录,进行接口测试的方法
    Dubbo
    那些吊炸天的互联网名词
    版本控制工具git
    Ubunto20.04 sudo apt-get update 出现目标被重置多次!
    ubuntu环境下搭建Hadoop集群中必须需要注意的问题
    Python作业---内置数据类型
    python作业完成简单的文件操作
    python3实现计算器
  • 原文地址:https://www.cnblogs.com/da-peng/p/10023015.html
Copyright © 2011-2022 走看看