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

     

     

     

     

     
  • 相关阅读:
    最难的事
    性格决定命运,习惯决定未来
    系统构架师之路
    时间是经不起浪费的
    如何投资自己,增加自身价值!
    最好的程序员大多是自学成才的
    杂记
    Win7启动Oracle出错
    推荐代码生成器工具排行
    Hibernate 与 Oracle 11g 的问题
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9243245.html
Copyright © 2011-2022 走看看