多线程编程之ReentrantReadWriteLock
来源:互联网 发布:linux常用命令grep 编辑:程序博客网 时间:2024/05/18 03:06
ReentrantLock是一个完全互斥排他的效果(和synchronized一样),但是这样有的时候会影响效率,就像两个线程同时读取一个数据,这样并不会产生线程不安全,如果使用ReentrantLock则会形成:先读线程一,然后读线程二,但是使用ReentrantReadWriteLock就可以避免这种情况。
读读共享:
package ReentrantReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;//读读共享public class Service { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public void Method() { try { lock.readLock().lock(); System.out.println("线程"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"获得线程"); Thread.sleep(10000); }catch(InterruptedException e){ e.printStackTrace(); }finally { lock.readLock().unlock(); } }}package ReentrantReadWriteLock;public class Run { public static void main(String[] args) { Service service = new Service(); Runnable runnable = new Runnable() { public void run() { service.Method(); } }; Thread threadA = new Thread(runnable); Thread threadB = new Thread(runnable); threadA.setName("A"); threadA.start(); threadB.setName("B"); threadB.start(); }}//输出://线程B在1508554977877获得锁//线程A在1508554977877获得锁//几乎同一时间开始
写写互斥:
package ReentrantReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;//写写互斥public class Service2 { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public void Method() { try { lock.writeLock().lock(); System.out.println("线程"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"获得线程"); Thread.sleep(10000); }catch(InterruptedException e){ e.printStackTrace(); }finally { lock.writeLock().unlock(); } }}package ReentrantReadWriteLock;//写写互斥public class Run2 { public static void main(String[] args) { Service2 service = new Service2(); Runnable runnable = new Runnable() { public void run() { service.Method(); } }; Thread threadA = new Thread(runnable); Thread threadB = new Thread(runnable); threadA.setName("A"); threadA.start(); threadB.setName("B"); threadB.start(); }}//输出://线程A在1508555054030获得线程//线程B在1508555064030获得线程//这个大约中间间隔了10秒钟
读写互斥:
package ReentrantReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class Service3 { private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public void read() { try { lock.readLock().lock(); System.out.println("线程"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"获得锁"); Thread.sleep(10000); }catch(InterruptedException e) { e.printStackTrace(); }finally { lock.readLock().unlock(); } } public void write() { try { lock.writeLock().lock(); System.out.println("线程"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"获得锁"); Thread.sleep(10000); }catch(InterruptedException e) { e.printStackTrace(); }finally { lock.writeLock().unlock(); } }}package ReentrantReadWriteLock;public class Run3 { public static void main(String[] args) { Service3 service = new Service3(); Runnable runnableRead = new Runnable() { public void run() { service.read(); } }; Runnable runnablewrite = new Runnable() { public void run() { service.write(); } }; Thread threadA = new Thread(runnableRead); threadA.setName("A"); threadA.start(); Thread threadB = new Thread(runnablewrite); threadB.setName("B"); threadB.start(); }}//输出://线程A在1508555152523获得锁//线程B在1508555162524获得锁//中间也间隔了10秒左右
阅读全文
0 0
- 多线程编程之ReentrantReadWriteLock
- Java多线程之ReentrantReadWriteLock
- java多线程编程-ReentrantReadWriteLock笔记
- 我之见--多线程ReentrantReadWriteLock
- JAVA多线程学习之ReentrantReadWriteLock
- 多线程之读写锁ReentrantReadWriteLock
- java多线程学习之ReentrantReadWriteLock(一)
- java多线程学习之ReentrantReadWriteLock(二)
- Java多线程编程4--ReentrantReadWriteLock的使用(读写锁)
- 多线程编程入门(13):读写锁的使用(ReentrantReadWriteLock)
- Java多线程编程-(7)-使用ReentrantReadWriteLock实现Lock并发
- Java多线程编程-(15)-读写锁ReentrantReadWriteLock深入分析
- Java多线程编程-(17)-读写锁ReentrantReadWriteLock深入分析
- Java多线程(十)之ReentrantReadWriteLock深入分析
- 多线程之使用读写锁ReentrantReadWriteLock实现缓存系统
- Java多线程(十)之ReentrantReadWriteLock深入分析
- JAVA多线程之——读写锁 ReentrantReadWriteLock
- Java多线程(十)之ReentrantReadWriteLock深入分析
- windows核心编程--同步设备I/O与异步设备I/O
- 1068. 万绿丛中一点红(20)
- 经典试题(1)
- [Archive]更改ORACLE默认归档路径
- Wannafly模拟赛4 B.Distance 最大曼哈顿距离
- 多线程编程之ReentrantReadWriteLock
- Search Insert Position:二分搜索
- Node.js启程之旅(一)之安装和检查
- 经典试题(2)
- 自己写的一个猜拳小游戏(C语言)
- JQuery实用控件
- 栈和队列 生成窗口最大数组
- Python错误:bs4.FeatureNotFound: Couldn't find a tree builder with the features you
- Linux下TCP最大连接数受限问题