线程类Thread的API接口分析系列之读写锁ReentrantReadeWriteLock
来源:互联网 发布:彩虹自动发卡源码 编辑:程序博客网 时间:2024/06/02 16:20
读写锁的使用相对简单,原则也好记,那就是读读之间不互斥,读写之间互斥,直接上例子吧
读读之间:
public class ReadeWriteLockTest implementsRunnable {
ReentrantReadWriteLocklock = new ReentrantReadWriteLock();
/*@author : zhengrf1
* @date 创建时间:2017年3月9日 上午10:19:06
* @see java.lang.Runnable#run()
*/
@Override
publicvoid run() {
//TODO Auto-generated method stub
lock.readLock().lock();
System.out.println(Thread.currentThread().getName()+"获取到 读锁,休息10秒");
try{
Thread.sleep(10000);
}catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
lock.readLock().unlock();
System.out.println(Thread.currentThread().getName()+"释放锁");
}
/**
*
*@author : zhengrf1
*@date 创建时间:2017年3月9日上午10:19:06
*/
publicstatic void main(String[] args) {
//TODO Auto-generated method stub
ReadeWriteLockTesttest = new ReadeWriteLockTest();
Threadtest1 = new Thread(test);
Threadtest2 = new Thread(test);
test1.start();
test2.start();
}
}
--输出:
Thread-1获取到读锁,休息10秒
Thread-0获取到读锁,休息10秒
Thread-0释放锁
Thread-1释放锁
---说明读读锁之间是不互斥的
写写之间
public class ReadeWriteLockTest implementsRunnable {
ReentrantReadWriteLocklock = new ReentrantReadWriteLock();
/*@author : zhengrf1
* @date 创建时间:2017年3月9日 上午10:19:06
* @see java.lang.Runnable#run()
*/
@Override
publicvoid run() {
//TODO Auto-generated method stub
lock.writeLock().lock();
System.out.println(Thread.currentThread().getName()+"获取到 读锁,休息10秒");
try{
Thread.sleep(10000);
}catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
lock.writeLock().unlock();
System.out.println(Thread.currentThread().getName()+"释放锁");
}
/**
*
*@author : zhengrf1
*@date 创建时间:2017年3月9日上午10:19:06
*/
publicstatic void main(String[] args) {
//TODO Auto-generated method stub
ReadeWriteLockTesttest = new ReadeWriteLockTest();
Threadtest1 = new Thread(test);
Threadtest2 = new Thread(test);
test1.start();
test2.start();
}
}
输出:
Thread-0获取到读锁,休息10秒
Thread-0释放锁
Thread-1获取到读锁,休息10秒
Thread-1释放锁
--说明写写之间互斥
写读之间:
public class ReadeWriteLockTest implementsRunnable {
staticReentrantReadWriteLock lock = new ReentrantReadWriteLock();
Stringtype;
/*@author : zhengrf1
* @date 创建时间:2017年3月9日 上午10:19:06
* @see java.lang.Runnable#run()
*/
@Override
publicvoid run() {
//TODO Auto-generated method stub
if(type.equals("read")){
lock.readLock().lock();
}else{
lock.writeLock().lock();
}
System.out.println(Thread.currentThread().getName()+"获取到 读锁,休息10秒");
try{
Thread.sleep(10000);
}catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
if(type.equals("read")){
lock.readLock().unlock();
}else{
lock.writeLock().unlock();
}
System.out.println(Thread.currentThread().getName()+"释放锁");
}
/**
*
*@author : zhengrf1
*@date 创建时间:2017年3月9日上午10:19:06
*/
publicstatic void main(String[] args) {
//TODO Auto-generated method stub
// ReadeWriteLockTesttest = new ReadeWriteLockTest();
ReadeWriteLockTestlock1 = new ReadeWriteLockTest();
ReadeWriteLockTestlock2 = new ReadeWriteLockTest();
lock1.type="read";
lock2.type="write";
Threadtest1 = new Thread(lock1);
Threadtest2 = new Thread(lock2);
test1.start();
test2.start();
}
}
输出:
Thread-1获取到读锁,休息10秒
Thread-1释放锁
Thread-0获取到读锁,休息10秒
Thread-0释放锁
--说明读写互斥
- 线程类Thread的API接口分析系列之读写锁ReentrantReadeWriteLock
- 线程类Thread的API接口分析系列之interrupt()
- 线程类Thread的API接口分析系列之Condition
- 线程类Thread的API接口分析系列之守护线程setDaemon
- 线程类Thread的API接口分析系列之线程组ThreadGroup
- 线程类Thread的API接口分析系列之管道通讯Piped
- 线程类Thread的API接口分析系列之定时器Timer
- thread API:实现线程类
- 线程(Thread类,Runnable接口)
- C#Thread类多线程系列之(三)线程同步技术
- 线程的随机性之实现Thread类
- 线程的初步理解,生命周期,实现方法,Thread类,Runnable接口,Callable接口线程池
- C#线程系列讲座(2):Thread类的应用
- C#线程系列讲座(2):Thread类的应用
- C#线程系列讲座(2):Thread类的应用
- C#线程系列讲座(2):Thread类的应用
- C#线程系列讲座(2):Thread类的应用
- C#线程系列讲座(2):Thread类的应用
- 二三层转发具体过程
- SSO单点登录三种情况的实现方式详解
- Mac下配置ndk/adb
- Mac下安装Ruby环境
- SqlServer远程连接
- 线程类Thread的API接口分析系列之读写锁ReentrantReadeWriteLock
- 如何改变Android Studio中字体大小和样式
- Bootstrap笔记13—进度条、媒体对象
- Six Tiny But Awesome ES6 Features
- 对OkHttp3的单独封装 get和post
- eclipse debug
- Android Notification常见样式总结
- windows7下tensorflow 1.0.0 cpu版本安装
- 启动tomcat后出现红色 警告:did not find a matching property