码迷,mamicode.com
首页 > 编程语言 > 详细

Java-并发-Lock&&Synchronized

时间:2015-11-22 23:09:30      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

Sychronized

锁住代码块,执行代码块。

释放锁:

   1.获取锁的线程执行完,并释放锁的占有

   2.执行发生异常,JVM让线程自动释放锁

缺点:

   1.异常只会被抛出,不能被解决,维护系统正常

 

Lock

  public interface Lock{

       void lock();//获取锁,锁已被其他线程获取,进行等待

       void lockInterruptibly()throws InterruptedException;

       boolean tryLock();//success->true;fail->false

       boolean tryLock(long time,TimeUnit unit)throws InterruptedException;

       void unlock();

       Condition newCondition();

}

<lock()>

Lock lock=new ReentrantLock();//ReentrantLock实现了Lock,拥有相同的并发性和内存语义

//有与锁相关的获取计数器,拥有锁的某个线程再次得到锁,+1,e.g.退出第二个synchronized块,不释放锁,退出第一个synchronized块,释放锁

try{

}finally{

lock.unlock();//在finally中,确保锁一定被释放
}

//lock 必须在finally中释放,否则抛出异常

<tryLock()>

boolean captured=lock.tryLock();

try{

}finally{
   if(captured)

       lock.unlock();

   else

       .....//未获取到锁

}

<tryLock(long time,TimeUnit)throws InterruptedException;>

try{

   boolean captured=tryLock(2,TimeUnit.SECONDS);

}catch(InterrupedException e){

  throw new RuntimeException(e);

}

try{

  }finally{
  if(captured)

     lock.unlock();

   else

    ....}

  

 

////////////////////看到了有趣的。。。用于遍历链接列表中的节点的节点传递的加锁机制

///////////////////先到这

 

Java-并发-Lock&&Synchronized

标签:

原文地址:http://www.cnblogs.com/HackHer/p/4986904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!