synchornized reentrant lock

原创 2016年08月21日 18:11:49

synchornized

那么为什么 开发 java.util.concurrent.lock 框架呢?答案很简单-同步是不错,但它并不完美。它有一些功能性的限制 —— 它无法中断一个正在等候获得锁的线程,也无法通过投票得到锁,如果不想等下去,也就没法得到锁。同步还要求锁的释放只能在与获得锁所在的堆栈帧相同的堆栈帧中进行,多数情况下,这没问题(而且与异常处理交互得很好),但是,确实存在一些非块结构的锁定更合适的情况。

reentrant lock

java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。这就为 Lock的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性能。(换句话说,当许多线程都想访问共享资源时,JVM 可以花更少的时候来调度线程,把更多时间用在执行线程上。)

reentrant 锁意味着什么呢?

简单来说,它有一个与锁相关的获取计数器,如果拥有锁的某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放。这模仿了 synchronized 的语义;如果线程进入由线程已经拥有的监控器保护的 synchronized 块,就允许线程继续进行,当线程退出第二个(或者后续) synchronized 块的时候,不释放锁,只有线程退出它进入的监控器保护的第一个 synchronized 块时,才释放锁。


快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

ReentrantLock解析

最近学习Jdk的源代码时,读到了ConcurrentHashMap的源码实现时,发现每一个分段Segment都是ReentrantLock类型,于是顺带对ReentrantLock的源代码进行了学习。...
  • yanlinwang
  • yanlinwang
  • 2014年10月25日 10:56
  • 17368

lock和synchornized教程

http://blog.csdn.net/fw0124/article/details/6672522
  • yz7074998
  • yz7074998
  • 2017年06月23日 18:10
  • 126

Java三种锁机制初步分析总结(Synchronized Lock(ReentrantLock) Semaphore Atomic)

Java处理高并发,大数据,多线程,分布式这些都会产生一个严重的后果,如何保证线程安全和数据的一致性成为重中之重。为了实现这点就不得不使用到了锁机制,java提供了4种常见的锁机制,当然其中Synch...
  • qq838642798
  • qq838642798
  • 2017年01月13日 00:30
  • 459

curator 锁之 Shared Reentrant Lock

1、描述 共享锁:全局同步分布式锁,同一时间两台机器只能有一台获得锁 2、参与类 InterProcessMutex 3、用法 3.1 创建 InterProcessMute...
  • klov001
  • klov001
  • 2015年01月10日 20:37
  • 2039

C51中的reentrant

C51中的reentrant 关于reentrant的使用keil的官方论坛上有详细的讨论. Andy Neil(官方工程师)建议 "Are you sure that ...
  • chenhssadf
  • chenhssadf
  • 2013年05月31日 11:52
  • 1864

Qt reentrant、thread-safe

解释一下贯穿整个Qt帮助文档的俩个关键字reentrant、thread-safe。(通常用来修饰函数或者类) 1.reentrant(可重入的):可以被多个线程同时调用,但是只能调用自己的...
  • sunxianliang1
  • sunxianliang1
  • 2015年12月10日 15:20
  • 404

java并发编程——四(synchronized\Lock\volatile) 锁机制原理及关联

前言 其实标题使用互斥机制更合适,并发中主要两个问题是:线程如何同步以及线程如何通信。 同步主要是通过互斥机制保证的,而互斥机制我们最熟悉的就是锁,当然也有无锁的CAS实现。 多线程共享资源,比...
  • lemon89
  • lemon89
  • 2016年02月25日 23:10
  • 1369

Synchornized使用及原理

同步,可见,synchornized,volatile
  • qianwenhong
  • qianwenhong
  • 2017年06月04日 08:59
  • 506

c51 reentrant 关键字,用法的一点理解,欢迎板砖!

/* 单片机分 端口映射 和 内存映射 51 为端口映射 但亦可以扩展为内存映射 那样就是混合映射 大部分的非51 cpu为内存映射 端口映射的CPU需要对c语言进行扩展,扩展端口映射语句,s...
  • helezh
  • helezh
  • 2014年09月12日 09:44
  • 1654

-D_REENTRANT机制

可重入: lfl@ubuntu:/usr/include$ vi errno.h 重点看该文件中下面的内容 /* Declare the `errno' variable, unless it'...
  • think_embed
  • think_embed
  • 2013年04月18日 18:31
  • 3130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:synchornized reentrant lock
举报原因:
原因补充:

(最多只允许输入30个字)