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

        ....}

      

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

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

  • 相关阅读:
    Windows抓取密码总结
    PHP一句话简单免杀
    Shiro反序列化利用
    windows绕过杀软添加账户密码
    java基础-操作符
    微信小程序开发笔记(十一)--输入框计数
    微信小程序开发笔记(十)--多选标签效果
    微信小程序开发笔记(九)--单选标签效果
    微信小程序开发笔记(八)--路由跳转
    proxy_pass 代理转发
  • 原文地址:https://www.cnblogs.com/HackHer/p/4986904.html
Copyright © 2011-2022 走看看