zoukankan      html  css  js  c++  java
  • ReentrantLock和Synchronized

    1 synchronized

    1.1 一旦没有获取到就只能一直等待

    A和B都获取同一个对象锁,如果A获取了,B没有获取到,那么在A释放该锁之前,B只能无穷等待下去。

    1.2 synchronized是不公平锁

    所谓的不公平就是后来的线程可能先获取大锁,从而会导致线程饥饿。

    1.3 synchronized直接使用Object的wait/notify

    2 Reentrantlock

    2.1 多个conditionn来使用wait/notify

    它可以让同步于同一个锁的线程等待不同的条件,这个是synchronized做不到的。参见ArrayBlockingQueue的实现。

    或者说,它对同步于同一个锁的线程进行了子集划分。

    2.2 获取锁超时

    2.3 获取锁中断

    2.4 如果不使用锁超时接口,没有获取到锁的话也要一直等待

    2.5 ReentrantLock可以是公平的也可以是非公平的

    公平的话,就是说,线程按照先来后到排队,fifo,先到的先获取锁。

    3 共同点

    当ReentrantLock不使用tryLock的时候,它们的是一样的,同一时间只能一个线程获取到锁,其它人只能等待。也就是说,总体上它们是一样的。

  • 相关阅读:
    输出乘数
    输出三角形---编程小记,跟答案不一样但是效果一样,自己动脑子想的,开心
    python collection
    python 之购物车
    python之计算器
    python学习笔记
    724.中心索引
    495.提莫队长
    342.4的幂
    657.机器人能否返回原点
  • 原文地址:https://www.cnblogs.com/hustdc/p/8922434.html
Copyright © 2011-2022 走看看