zoukankan      html  css  js  c++  java
  • ReentrantLock显示锁

    public class AttemptLocking {
    
        /*
         * public AttemptLocking() {
         * 
         * System.out.println("构造器初始化...");
         * }
         * 
         * {
         * System.out.println("init ...");
         * }
         * 
         * static {
         * System.out.println("static init ");
         * }
         */
        private ReentrantLock reentrantLock = new ReentrantLock();
    
        public void unTimed() {
    
            boolean captured = reentrantLock.tryLock();
    
            try {
                System.out.println("try lock:" + captured);
            } finally {
                // TODO: handle finally clause
                if (captured) {
                    reentrantLock.unlock();
                }
            }
        }
    
        public void timed() {
            boolean captured = false;
    
            try {
                try {
                    captured = reentrantLock.tryLock(2, TimeUnit.SECONDS);
                    System.out.println("tryLock 2 Seconds " + captured);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
            } finally {
                // TODO: handle finally clause
                if (captured) {
                    reentrantLock.unlock();
                }
            }
    
        }
    
        public static void main(String[] args) {
            final AttemptLocking attemptLocking = new AttemptLocking();
            attemptLocking.unTimed();
            attemptLocking.timed();
            new Thread() {
    
                {
                    setDaemon(true);
    
                }
    
                @Override
                public void run() {
    
                    attemptLocking.reentrantLock.lock();
    
                    System.out.println("acquired");
                };
    
            }.start();
            Thread.yield();// give the 2nd task a chance只是给另一个线程一个机会,并不保证另一个线程一定能得到资源
            attemptLocking.unTimed();
            attemptLocking.timed();
        }
    
    }
    output:
    
    

    try lock:true

    
    

    tryLock 2 Seconds true

    
    

    acquired

    
    

    try lock:false

    
    

    tryLock 2 Seconds false

     

     

     

     

     
  • 相关阅读:
    当简单的计算遇上了大数,其实大数运算也很简单
    揭开源码的神秘面纱,让源码从此无处藏身
    JAVA对象和XML文档、原来他们之间还有这一出
    JAVA反射其实就是那么一回事
    Metatable让我从心认知了Lua(相知篇)
    Github
    常见问题汇总
    文章目录
    前后端分离下使用SignalR
    IdentityServer_0_参考资料
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9243245.html
Copyright © 2011-2022 走看看