Java—读写锁的简单使用
来源:互联网 发布:abp框架源码 编辑:程序博客网 时间:2024/05/16 11:45
package cn.itcast.heima;
import java.util.Random;
import java.util.concurrent.locks.ReadWriteLock;
final Queue3 q3 = new Queue3();
for(int i=0;i<3;i++)
{
new Thread(){
public void run(){
while(true){
q3.get();
}
}
}.start();
new Thread(){
public void run(){
while(true){
q3.put(new Random().nextInt(10000));
}
}
}.start();
}
}
}
class Queue3{
private Object data = null;//共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。
ReadWriteLock rwl = new ReentrantReadWriteLock();
public void get(){
rwl.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + " be ready to read data!");
Thread.sleep((long)(Math.random()*1000));
System.out.println(Thread.currentThread().getName() + "have read data :" + data);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
rwl.readLock().unlock();
}
}
public void put(Object data){
rwl.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName() + " be ready to write data!");
Thread.sleep((long)(Math.random()*1000));
this.data = data;
System.out.println(Thread.currentThread().getName() + " have write data: " + data);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
rwl.writeLock().unlock();
}
}
import java.util.Random;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockTest {
final Queue3 q3 = new Queue3();
for(int i=0;i<3;i++)
{
new Thread(){
public void run(){
while(true){
q3.get();
}
}
}.start();
new Thread(){
public void run(){
while(true){
q3.put(new Random().nextInt(10000));
}
}
}.start();
}
}
}
class Queue3{
private Object data = null;//共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。
ReadWriteLock rwl = new ReentrantReadWriteLock();
public void get(){
rwl.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + " be ready to read data!");
Thread.sleep((long)(Math.random()*1000));
System.out.println(Thread.currentThread().getName() + "have read data :" + data);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
rwl.readLock().unlock();
}
}
public void put(Object data){
rwl.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName() + " be ready to write data!");
Thread.sleep((long)(Math.random()*1000));
this.data = data;
System.out.println(Thread.currentThread().getName() + " have write data: " + data);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
rwl.writeLock().unlock();
}
}
}
读锁和读锁不互斥,读锁和写锁互斥,写锁和写锁互斥
0 0
- Java—读写锁的简单使用
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- Java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- Java读写锁的使用
- Java 读写锁的简单实现
- java模拟实现简单的读写锁
- Java中简单的读写锁实现
- Java的RandomAccessFile随机文件读写的简单使用
- 使用Java实现对dbf文件的简单读写
- 使用Java实现对dbf文件的简单读写
- Java使用jxl对excel文件进行简单的读写
- 简单的JAVA文件读写
- java 简单的读写文件
- Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用
- java多线程:ReentrantReadWriteLock读写锁的使用
- java 线程 ReadWriteLock 读写锁的使用
- Zend Studio12.0破解方法(附网盘下载)
- ZOJ 2283 Challenge of Wisdom
- Vmware vSphere常见问题及解决办法
- C++ STL 算法:对所有元素排序
- 国内各大城市的IT行业特色
- Java—读写锁的简单使用
- IsDebuggerPresent官方出处
- hadoop/spark调优以及遇到的问题
- 选择排序
- 如何获得设备环境句柄(HDC)--Win32 SDK
- 国内各大城市的IT行业特色
- Android开发--大神博客汇总
- bzoj 1858 序列操作(线段树)
- uvalive3266(田忌赛马)