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

    闭锁只能用一次

  • 相关阅读:
    C++ 类型别名typedef和using
    网页布局及响应式
    js上传图片预览
    bootstrap中-webkit-text-size-adjust :not()
    开始
    通过setDB2Client*来方便的使用TRACE调优jdbc程序
    关于携程的信息泄漏
    如何设置DB2I(SPUFI)来正常工作
    Limit the query running time with Resource limit facility (RLF)
    z/os上的tar和gzip(3)
  • 原文地址:https://www.cnblogs.com/da-peng/p/10023015.html
Copyright © 2011-2022 走看看