ReadWriteLock读写文件

概述

ReadWriteLock是一个接口,在它里面只定义了两个方法:一个读的锁和一个写的锁。

读的锁:A线程获取了读的锁,那么B线程也可以获取读的锁。

写的锁:A线程获取了写的锁,那么B线程不能获取读也不能获取写的锁。

public interface ReadWriteLock {/*** Returns the lock used for reading.* 读的锁,A线程获取了读的锁,那么B线程也可以获取读的锁* @return the lock used for reading.*/Lock readLock();/*** Returns the lock used for writing.* 写的锁,A线程获取了写的锁,那么B线程不能获取读也不能获取写的锁。* @return the lock used for writing.*/Lock writeLock();
}


代码

/*** 使用读写锁,可以实现读写分离锁定,读操作并发进行,写操作锁定单个线程* * 如果有一个线程已经占用了读锁,则此时其他线程如果要申请写锁,则申请写锁的线程会一直等待释放读锁。* 如果有一个线程已经占用了写锁,则此时其他线程如果申请写锁或者读锁,则申请的线程会一直等待释放写锁。* @author**/
public class MyReentrantReadWriteLock {private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();public static void main(String[] args)  {final MyReentrantReadWriteLock test = new MyReentrantReadWriteLock();new Thread(){public void run() {test.get(Thread.currentThread());test.write(Thread.currentThread());};}.start();new Thread(){public void run() {test.get(Thread.currentThread());test.write(Thread.currentThread());};}.start();}  /*** 读操作,用读锁来锁定* @param thread*/public void get(Thread thread) {rwl.readLock().lock();try {long start = System.currentTimeMillis();while(System.currentTimeMillis() - start <= 1) {System.out.println(thread.getName()+"正在进行读操作");}System.out.println(thread.getName()+"读操作完毕");} finally {rwl.readLock().unlock();}}/*** 写操作,用写锁来锁定* @param thread*/public void write(Thread thread) {rwl.writeLock().lock();;try {long start = System.currentTimeMillis();while(System.currentTimeMillis() - start <= 1) {System.out.println(thread.getName()+"正在进行写操作");}System.out.println(thread.getName()+"写操作完毕");} finally {rwl.writeLock().unlock();}}
}

运行结果

读的时候,线程是并行的



写的时候,是单线程的



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的Runnable、Callable、Future、FutureTask的区别与示例

原文地址&#xff1a;http://blog.csdn.net/bboyfeiyu/article/details/24851847 --------------------------------------------------------- Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口&#xff0c;在Java中也是比较重要的几个概念&am…

sql count为空时显示0_C0010负坐标显示为正数+红色0值参考线

小伙伴们早上好啊&#xff01;今天继续为大家分享柱形图的美化技巧。希望大家认真阅读Excel文件和教程&#xff0c;有的图表看起来简单&#xff0c;实际上在细节处理上用了很多技巧&#xff0c;大家要多多体会。C0010-负坐标显示为正数红色0值参考线效果图图表概述本图可以用来…

配置IISExpress允许外部访问

配置IISExpress允许外部访问 1.找到IISExpress的配置文件&#xff0c;位于 <文档>/IISExpress/config文件夹下&#xff0c;打开applicationhost.config&#xff0c;找到如下代码&#xff1a;<site name"WebSite1" id"1" serverAutoStart"tru…

mac预装的php路径,Mac使用系统自带php和Apache

最美的语言本文将介绍在Mac环境下如何使用系统本身所带有的Apache(阿帕奇服务器)通过预装的PHP版本来运行PHP的相关代码&#xff0c;相对来讲在OS X系统下相对好配置一些&#xff0c;因为Apache和PHP都预装好了&#xff0c;如果是Windows环境我们需要自己安装ApachePHPMysql(通…

IP编址,IP地址介绍与子网划分方法

网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外&#xff0c;还必须理解IP编址以及如何合理地使用IP地址来设计网络。 上层协议类型 以太网帧中的Typ…

3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门

tensorflow基础入门 思考一个问题: 如何刚好学习TensorFlow 类比为一门开发语言&#xff0c;学会语法&#xff0c;api的调用&#xff0c; 原理性掌握。语言的要素: 基础数据类型 运算符 流程 字典 数组 import tensorflow as tf# 常量&#xff0c;指定数据类型 data1 tf.const…

r 函数返回多个值_第四讲 R描述性统计分析

在“R与生物统计专题”中&#xff0c;我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深&#xff0c;层层递进的形式在投必得医学公众号更新。在上一讲中&#xff0c;我们介绍了第三讲 R编程基础-矩阵和数据框 (戳这里即可跳转)。到现在为止&#xff0c;大…

百度腾讯中兴华为全部入局Linux Foundation深度学习基金会

2019独角兽企业重金招聘Python工程师标准>>> 虽然名字叫做Linux Foundation&#xff0c;但是这家基金会关注的领域并不局限在Linux操作系统领域。事实上&#xff0c;Linux Foundation基金会还为很多其他开源基金和项目提供支持&#xff0c;比如Cloud Foundry、Autom…

python读取mysql数据库_Python操作MySQL数据库9个实用实例

在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候&#xff0c;需要用的安装版本&#xff0c;源码版本容易有错误提示。下边是打包了32与64版本。 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1、取得 MYSQL 的版本 #…

win主机上搭建php网站运行环境,Windows server 2008搭建php运行环境图文详解(php5.3)

这篇文章主要为大家分享下Windows server 2008搭建php运行环境的步骤&#xff0c;需要的朋友可以参考下下载php组件包首先到http://windows.php.net/download/下载你需要的php版本&#xff0c;这里我下载的是php5.3。下面解压php组件 包到磁盘上。安装Microsoft Visual C 2008 …

plsql developer连接oracle--本地不安装oracle

工具 数据库开发程序 PLSQL Developer oracle 客户端 instantclient&#xff0c;点击下载 &#xff08;下载与oracle相同版本或最新版本&#xff0c;如果 PLSQL Developer是32位&#xff0c;则要下载32位的&#xff09;安装 1、解压oracle客户端 到盘某个目录。我的目录是C:\or…

keepalived配置高可用集群

准备工作 分别在主从上安装keepalived和nginxyum install -y keepalivedyum install -y nginx关闭主从上的防火墙和SELinuxsystemctl stop firewalldsetenforce 0 配置主机 查看主机ip [rootlynn-04 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…

jsp超链接到java文件,jsp页面超链接传中文终极解决办法

在做web前端页面的时候&#xff0c;经常碰到传中文问题。网上有许多方案&#xff0c;但仍不能根治&#xff0c;最终要用js或者java的encode相关方法。常规方案有三部&#xff1a;1.改tomcat的server.xml中URIEncodeing为utf-82.页面中编码设置为utf-83.整个项目编码使用utf-8我…

隐藏域input里面放当前时间_【小A问答】Win10的隐藏小秘密,被我发现了!

无惊无险又到小A问答环节辣~~今天的小A要来给大家分享一些小秘密&#xff01;当然&#xff0c;这可不是小A自己的小秘密&#xff0c;是关于你电脑的小秘密哦&#xff01;知道吗&#xff1f;Windows10每一次升级更新&#xff0c;都会伴随着新功能的增加。这些隐藏的功能你都发现…

h5文字垂直居中_CSS中垂直居中和水平垂直居中的方法

flex垂直居中&#xff1a;第一种&#xff1a;使用flex布局&#xff0c;让居中元素的父元素为flex属性,让它在交叉轴上center就可以达到居中效果了&#xff1a;html代码: <div class"father"><p>我要垂直居中</p> </div>css代码: .father {…

c++直角坐标系与极坐标系的转换_平面向量的奇技淫巧——斜坐标系的一系列低级研究...

事先说明&#xff1a;笔者初三&#xff0c;如在叙述中有不严谨的地方&#xff0c;还请诸位指出&#xff0c;自当感激不尽。一.什么是斜坐标系众所周知&#xff0c;我们目前平面中使用相当广的坐标系是笛卡尔发明的平面直角坐标系。然而&#xff0c;笛卡尔真的只使用了这一种坐标…

一行命令从 APK 文件中提取 Endpoint 及 URL

做IoT的人免不了要接触Android&#xff0c;接触Android的人又免不了要研究别人的App应用。 Diggy&#xff0c;一款能够从 apk 文件中提取 endpoint 及 URL 的工具&#xff0c;只要一行命令就可以帮大家提取出相关Android apk文件的安装信息和互联网访问信息。 下载地址&#xf…

antd 获取table选中行数据_element-ui 组件el-table默认选中行setCurrentRow采坑记

1.背景选中表格中某一行&#xff0c;高亮显示&#xff0c;table表格数据变化后&#xff08;删除某几条数据&#xff0c;不包括选中的删除&#xff09;&#xff0c; this.$refs.multipleTable.setCurrentRow(row),选中之前选中的行&#xff0c;可发现总是选中下一条的数据&#…

Unity protobuf中repeated转C#文件List只读问题

Unity protobuf中repeated转C#文件List只读问题 介绍问题解决方案总结 介绍 工具这里我就不多介绍了&#xff0c;如果有用到ProtoGen工具的可以继续看一下我后面的方法。 问题 如下图所示&#xff0c;我这里随便用了一个.proto文件&#xff0c;看下我这里面的repeated标记的…

贪吃蛇程序 php,微信小程序-贪吃蛇教程实例

很久很久以前&#xff0c;差不多大半年前吧&#xff0c;笔者发布了一篇关于OC版贪食蛇开发的文章&#xff0c;时隔多月&#xff0c;微信小程序横空出世&#xff0c;于是闲来无事的我又写了一个小程序版下面这段话请务必阅读笔者是做iOS的&#xff0c;而小程序大部分都是前端的知…