zoukankan      html  css  js  c++  java
  • 系统响应慢什么原因?

    concurrent.locks包下常用类

     
    1. Lock
     
    首先要说明的是Lock,它是一个接口:
    [java] view plain copy
     
    1. public interface Lock {  
    2.     void lock();  
    3.     void lockInterruptibly() throws InterruptedException;  
    4.     boolean tryLock();  
    5.     boolean tryLock(long time, TimeUnit unit) throws InterruptedException;  
    6.     void unlock();  
    7.     Condition newCondition();  
    8. }  
    • lock()方法用来获取锁。
    • tryLock()尝试获取锁,如果成功则返回true,失败返回false(其他线程已占有锁)。这个方法会立即返回,在拿不到锁时也不会等待。
    • tryLock(long time, TimeUnit unit)方法和tryLock()方法类似,只不过在拿不到锁时等待一定的时间,如果超过等待时间还拿不到锁就返回false。
    • lockInterruptibly()方法比较特殊,当通过这个方法获取锁时,如果该线程正在等待获取锁,则它能够响应中断。也就是说,当两个线程同时通过lockInterruptibly()获取某个锁时,假如线程A获得了锁,而线程B仍在等待获取锁,那么对线程B调用interrupt()方法可以中断B的等待过程。
    [java] view plain copy
     
    1. // lock()的使用  
    2. Lock lock = ...;  
    3. lock.lock();  
    4. try{  
    5.     //处理任务  
    6. }catch(Exception ex){  
    7.        
    8. }finally{  
    9.     lock.unlock();   //释放锁  
    10. }  
    [java] view plain copy
     
    1. // tryLock()的使用  
    2. Lock lock = ...;  
    3. if(lock.tryLock()) {  
    4.      try{  
    5.          //处理任务  
    6.      }catch(Exception ex){  
    7.            
    8.      }finally{  
    9.          lock.unlock();   //释放锁  
    10.      }   
    11. }else {  
    12.     //如果不能获取锁,则直接做其他事情  
    13. }  
    [java] view plain copy
     
    1. // lockInterruptibly()的使用  
    2. public void method() throws InterruptedException {  
    3.     lock.lockInterruptibly();  
    4.     try {    
    5.      //.....  
    6.     }  
    7.     finally {  
    8.         lock.unlock();  
    9.     }    
    10. }  
    使用synchronized关键字,当线程处于等待锁的状态时,是无法被中断的,只能一直等待。
  • 相关阅读:
    列表
    *
    Model/View
    文件
    提示用户输入并获得输入
    编码
    使用静态QT库编译的程序不显示中文
    rm命令
    高阶函数
    jquery checkbox 操作
  • 原文地址:https://www.cnblogs.com/panxuejun/p/8622651.html
Copyright © 2011-2022 走看看