synchornized reentrant lock
来源:互联网 发布:阿里云青岛服务器地址 编辑:程序博客网 时间:2024/06/06 05:17
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
- synchornized reentrant lock
- lock和synchornized教程
- synchornized
- curator 锁之 Shared Reentrant Lock
- Java 多线程并发编程之互斥锁 Reentrant Lock
- Java 多线程并发编程之互斥锁 Reentrant Lock
- Java多线程并发编程 — 读写锁 Reentrant Read Write Lock
- [Reentrant Kernels]
- 关于reentrant
- synchornized关键字的理解
- Synchornized使用及原理
- 可重入(reentrant)函数
- 函数可重入性(reentrant)
- Reentrant Functions可重入函数
- C51中的reentrant
- Softirqs , tasklets, reentrant.
- thread safe vs reentrant
- thread-safe 和 reentrant
- Kafka集群安装
- Android自定义View
- Linux文件的三种时间属性
- java--类加载器(一)
- Android开发笔记之xutil问题
- synchornized reentrant lock
- CSS float 属性
- 咳咳 萌新一枚。。。。历练之路
- 如何在SecureCRT中给linux上传和下载文件
- android知识点总结
- 基于mybatis的动态条件查询
- opencv3.0程序在debug下可以运行,在release下运行报cv::exception错误问题
- poj3723Conscription
- 设计模式-备忘录模式