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

        ....}

      

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

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

  • 相关阅读:
    第二篇:服务消费者Feign
    第一篇:服务的注册与发现Eureka(Finchley版本)
    记一次包扫描的犯错
    0.简单工厂-simplefactory(非23之一)
    设计模式基础
    设计模式--六大设计原则
    Java中的包
    Java内部类
    Java多线程
    Java同步
  • 原文地址:https://www.cnblogs.com/HackHer/p/4986904.html
Copyright © 2011-2022 走看看