系统响应慢什么原因?

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关键字,当线程处于等待锁的状态时,是无法被中断的,只能一直等待。
posted @ 2018-03-22 11:47  跨境电商杂货铺  阅读(270)  评论(0编辑  收藏  举报