• 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

        ....}

      

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

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

  • 相关阅读:
    Setvlet基础(三) ServletContext
    Servlet基础(二) Servlet的生命周期
    Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
    JS执行队列
    this指向问题
    发送短信案例
    倒计时
    2:定时器
    1_2:调整窗口大小事件 [ onresize ]
    1_1:页面加载事件 [ window.onload ]
  • 原文地址:https://www.cnblogs.com/HackHer/p/4986904.html
Copyright © 2020-2023  润新知