zoukankan      html  css  js  c++  java
  • Java-并发-Lock&&Synchronized

    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

        ....}

      

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

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

  • 相关阅读:
    IDEA常用快捷指令整理
    Python dict 字典
    内联函数
    【MFC】编辑框 CEdit Ctrl控件自动换行设置
    mysql 多sql文件恢复方案
    Linux: 用64位的系统,能编译32位的程序吗?
    C++ 遍历数组
    工业现场传感器传感器为什么采用电流形式输出?
    【转】电磁阀、电磁铁的工作原理说明
    PCB板强弱电隔离距离不够导致损坏和问题检查记录
  • 原文地址:https://www.cnblogs.com/HackHer/p/4986904.html
Copyright © 2011-2022 走看看