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

     

     

     

     

     
  • 相关阅读:
    Loved
    什么是REST
    统一资源定位符URL(Uniform Resource Locator)
    HTTP工作原理
    系统程序员成长计划内存管理(一)
    系统程序员成长计划工程管理(四)
    系统程序员成长计划-内存管理(四)
    HTTP请求报文格式
    系统程序员成长计划内存管理(二)
    系统程序员成长计划-内存管理(三)
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9243245.html
Copyright © 2011-2022 走看看