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

     

     

     

     

     
  • 相关阅读:
    selector 使用说明
    volley用法之 以post方式发送 json 参数
    linux系统下使用流行的版本管理工具 Git
    Android BLE 蓝牙编程(四)
    Android BLE 蓝牙编程(三)
    Android BLE 蓝牙编程(二)
    Android BLE 蓝牙编程(一)
    php比较两个字符串是否相同
    下拉刷新
    理财小工具(二)贷款计算器
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9243245.html
Copyright © 2011-2022 走看看