java 5 ReadWriteLock
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; public class ReadWriteLockTest
{
private static List<String> list = new ArrayList<String>();
public static void main(String[] args)
{
for(int i = 0; i < 10; i++)
{
list.add("init - " + i);
}
new Thread(new Runnable()
{
public void run()
{
try
{
ReadWriteLockTest.add();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable()
{
public void run()
{
try
{
ReadWriteLockTest.get();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
} private static ReadWriteLock lock = new ReentrantReadWriteLock();
private static void add() throws Exception
{
for(int i = 0; i < 10; i++)
{
lock.writeLock().lock();
list.add("add-" + i);
lock.writeLock().unlock();
System.out.println("add " + i);
Thread.sleep(500);
}
} private static void get() throws Exception
{
lock.readLock().lock();
for(String str : list)
{
System.out.println("get- " + str);
Thread.sleep(500);
}
lock.readLock().unlock();
}
}
上面有2个线程同时对list变量读写,如果不使用读写锁,则程序会抛出异常。
多个读锁不互斥,读锁也写锁互斥,写锁与写锁互斥。
java 5 ReadWriteLock的更多相关文章
- Java 多线程 ReadWriteLock
ReadWriteLock是JDK 1.5提供的读写分离锁,可以减少锁竞争.例如,线程A1.A2和A3进行写操作,线程B1.B2和B3进行读操作,如果使用重入锁或者内部锁,那么理论上所有读之间.读与写 ...
- java多线程 -- ReadWriteLock 读写锁
写一条线程,读多条线程能够提升效率. 写写/读写 需要“互斥”;读读 不需要互斥. ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作.只要没有 writer,读取锁 ...
- Java并发ReadWriteLock接口
java.util.concurrent.locks.ReadWriteLock接口允许一次读取多个线程,但一次只能写入一个线程. 读锁 - 如果没有线程锁定ReadWriteLock进行写入,则多线 ...
- Java Concurrency - ReadWriteLock & ReentrantReadWriteLock
锁所提供的最重要的改进之一就是 ReadWriteLock 接口和它的实现类 ReentrantReadWriteLock.这个类提供两把锁,一把用于读操作和一把用于写操作.同一时间可以有多个线程执行 ...
- java多线程-ReadWriteLock
大纲: ReadWriteLock接口 ReentrantReadWriteLock ReentrantReadWriteLock使用 一.ReadWriteLock public interface ...
- Java并发——显示锁
Java提供一系列的显示锁类,均位于java.util.concurrent.locks包中. 锁的分类: 排他锁,共享锁 排他锁又被称为独占锁,即读写互斥.写写互斥.读读互斥. Java的ReadW ...
- java锁类型
转载链接在每个锁类型后边 线程锁类型 1.自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制.for去争取锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchroni ...
- JavaSE面试题收集【仅有题目,答案自备】
一共有140个题目,可以参考下.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?说说&和&&的区别在Java中如何跳出当前的多重嵌套循环?IO流的分类S ...
- Ehcache BlockingCache 源码分析
BlockingCache是对Ehcache进行的扩展,BlockingCache内置了读写锁,不需要用户显示调用. 要彻底分析BlockingCache的原理,需要首先来看一下它内部用到的一些类. ...
随机推荐
- PHP unlink() 函数
定义和用法 unlink() 函数删除文件. 若成功,则返回 true,失败则返回 false. 语法 unlink(filename,context) 参数 描述 filename 必需.规定要删除 ...
- Android TextView自动实现省略号
TextView自带的可以通过 android:ellipsize="end" android:singleLine="true"实现单行省略, 但是当我们需 ...
- Spring cloud项目实践(一)
链接地址:http://sail-y.github.io/2016/03/21/Spring-cloud%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5/ 什么是Spring ...
- EventLog实现事件日志操作
选中”我的电脑”,在其右键菜单中选择“管理”,在打开的对话框中包括了如下图所示的“日志”信息: 选中其中的某一条日志,可以看到如下的详细信息: 我们应该如何通过写代码的方式向其中添加“日志”呢? 在操 ...
- trash目录: ~/.local/share/Trash
trash目录:~/.local/share/Trash
- FastCGI技术
1 FastCGI介绍 FastCGI:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议. ...
- NGINX(二)内存池
ngxin中为了加快内存分配的速度,引入了内存池, 大块申请, 减少分配次数, 小块分割, 极大的提高了内存申请速度, 另外一个用途就是省去了很多内存管理的任务,因为这里没有提供内存释放的功能,也就是 ...
- HDU 3416 Marriage Match IV dij+dinic
题意:给你n个点,m条边的图(有向图,记住一定是有向图),给定起点和终点,问你从起点到终点有几条不同的最短路 分析:不同的最短路,即一条边也不能相同,然后刚开始我的想法是找到一条删一条,然后光荣TLE ...
- [Tommas] 如何创建自动化功能测试的基本原则
每个实行持续交付的项目,都有生产流水线的元素,如持续集成和自动化测试.这些测试是在不同层面进行的,从单元测试到冒烟测试再到功能测试.自动化功能测试的优点之一是可重复性和可预测的执行时间.出于这个原因, ...
- Spark + Mesos 注意事项
在使用spark-submit的过程中,需要注意 spark-defaults.conf Spark-defaults.conf的作用范围要搞清楚,编辑driver所在机器上的spark-defaul ...