ReentrentLock重入锁
ReentrentLock lock=new ReentrentLock();
lock.lock();
//锁的代码
finally{
lock.unlock();
}
ReentrentLock 比synchronized具有更好的扩展性
ReentrentLock 可以通过lockInterruptibly()方法实现中断锁 通过Thread的interrput方法中断,中断之后放弃执行,释放资源 ReentrentLock可以通过tryLock(),tryLock(时间,时间单位)所申请等待时间,如果获得成功返回true,如果是失败返回false,tryLock()会立即返回,tryLock(时间,时间单位)在这段时间内尝试获得锁。
ReentrentLock构造方法里面有一个boolean fair 默认false,传入true表示公平锁
ReentrentLock重入锁的更多相关文章
- 从源码角度彻底理解ReentrantLock(重入锁)
目录 1.前言 2.AbstractQueuedSynchronizer介绍 2.1 AQS是构建同步组件的基础 2.2 AQS的内部结构(ReentrantLock的语境下) 3 非公平模式加锁流程 ...
- java并发系列(四)-----源码角度彻底理解ReentrantLock(重入锁)
1.前言 ReentrantLock可以有公平锁和非公平锁的不同实现,只要在构造它的时候传入不同的布尔值,继续跟进下源码我们就能发现,关键在于实例化内部变量sync的方式不同,如下所示: /** * ...
- ReentrantLock(重入锁)的源码解析
转自:从源码角度彻底理解ReentrantLock(重入锁)](https://www.cnblogs.com/takumicx/p/9402021.html)) 公平锁内部是FairSync,非公平 ...
- Android 死锁和重入锁
死锁的定义: 1.一般的死锁 一般的死锁是指多个线程的执行必须同时拥有多个资源,由于不同的线程需要的资源被不同的线程占用,最终导致僵持的状态,这就是一般死锁的定义. package com.cxt.t ...
- 可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁
1.可重入锁 如果锁具备可重入性,则称作为可重入锁. ========================================== (转)可重入和不可重入 2011-10-04 21:38 这 ...
- java ReentrantLock可重入锁功能
1.可重入锁是可以中断的,如果发生了死锁,可以中断程序 //如下程序出现死锁,不去kill jvm无法解决死锁 public class Uninterruptible { public static ...
- synchronized关键字,Lock接口以及可重入锁ReentrantLock
多线程环境下,必须考虑线程同步的问题,这是因为多个线程同时访问变量或者资源时会有线程争用,比如A线程读取了一个变量,B线程也读取了这个变量,然后他们同时对这个变量做了修改,写回到内存中,由于是同时做修 ...
- 可重入锁 & 自旋锁 & Java里的AtomicReference和CAS操作 & Linux mutex不可重入
之前还是写过蛮多的关于锁的文章的: http://www.cnblogs.com/charlesblc/p/5994162.html <[转载]Java中的锁机制 synchronized &a ...
- Java并发编程-可重入锁
可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍可以获取该锁而不受影响.在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁. publ ...
随机推荐
- mongoDB最新版安装
转载自:http://www.higis.org/2012/04/25/ubuntu-install-mongodb/ ubuntu上安装mongodb本可以直接通过sudo apt-get inst ...
- 让Dropdownlist既有静态项又有动态项或者既能有编辑项又能绑定数据源
原文发布时间为:2008-10-27 -- 来源于本人的百度文章 [由搬家工具导入] protected void Page_Load(object sender, EventArgs e) //Dr ...
- 模仿原生淘宝app点击搜索时的页面滑动效果
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 详解C中volatile关键字(转)
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储 ...
- the project was not built since its build……
[问题描述] 用eclipse编译程序时,出现下面错误: The project was not built since its build path is incomplete. Cannot fi ...
- nslookup命令详解【转】
转自:http://blog.chinaunix.net/uid-28933499-id-3750357.html NSlookup命令的用法 用了域名服务器后,经常要查询域名的解析情况,nslook ...
- sprak 环境搭建的坑
1,/etc/hosts下的ip master/slave 的对照 /etc/sysconfig/network 配置: NETWORKING=yes HOSTNAME=master 以及spark/ ...
- 渗透测试集成环境Faraday
渗透测试集成环境Faraday Kali Linux集成了海量的渗透测试工具.但是这些工具在使用的时候,还是分离的.虽然用户可以通过Shell.日志/报告导入导出功能等方式,进行整合,但是仍然不便 ...
- Linux运维:CentOS6和7的区别
Liunx笔记:CentOS6和CentOS7的区别 路飞学城运维人员 在线流程图软件 Ago linux运维群: 93324526 笔者QQ:578843228 常用安装包下载 yum instal ...
- [BUG] CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
写在前面 在浏览view的时候,突然出现这个错误,不过还是很好解决的. bug 解决方案