java.util.concurrent包(4)——读写锁ReentrantReadWriteLock
来源:互联网 发布:ubuntu标题栏透明 编辑:程序博客网 时间:2024/06/05 04:27
读读之间不互斥,但读写之间,写写之间互斥。提高了效率保证了安全。
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class MyQueue
{
// 共享数据。该数据只能被一个线程写,可以被多个线程同时读
private Object data;
// 读读之间不互斥,但读写之间,写写之间互斥
ReadWriteLock rwlock = new ReentrantReadWriteLock();
// 取数据
public void get()
{
rwlock.readLock().lock();
try
{
String threadName = Thread.currentThread().getName();
System.out.println(threadName + ":准备读取数据了");
System.out.println(threadName + ":读取的数据是" + data);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
rwlock.readLock().unlock();
}
}
// 写数据
public void put(Object data)
{
rwlock.writeLock().lock();
try
{
String threadName = Thread.currentThread().getName();
System.out.println(threadName + ":准备写数据了");
this.data = data;
System.out.println(threadName + ":写的数据是" + data);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
rwlock.writeLock().unlock();
}
}
}
import java.util.Random;
public class MyQueueTest
{
public static void main(String[] args)
{
final MyQueue myqueue = new MyQueue();
for (int i = 0; i < 100; i++)
{
new Thread(new Runnable() {
public void run()
{
myqueue.get();
}
}).start();
new Thread(new Runnable() {
public void run()
{
myqueue.put(new Random().nextInt(1000));
}
}).start();
}
}
}
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class MyQueue
{
// 共享数据。该数据只能被一个线程写,可以被多个线程同时读
private Object data;
// 读读之间不互斥,但读写之间,写写之间互斥
ReadWriteLock rwlock = new ReentrantReadWriteLock();
// 取数据
public void get()
{
rwlock.readLock().lock();
try
{
String threadName = Thread.currentThread().getName();
System.out.println(threadName + ":准备读取数据了");
System.out.println(threadName + ":读取的数据是" + data);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
rwlock.readLock().unlock();
}
}
// 写数据
public void put(Object data)
{
rwlock.writeLock().lock();
try
{
String threadName = Thread.currentThread().getName();
System.out.println(threadName + ":准备写数据了");
this.data = data;
System.out.println(threadName + ":写的数据是" + data);
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
rwlock.writeLock().unlock();
}
}
}
import java.util.Random;
public class MyQueueTest
{
public static void main(String[] args)
{
final MyQueue myqueue = new MyQueue();
for (int i = 0; i < 100; i++)
{
new Thread(new Runnable() {
public void run()
{
myqueue.get();
}
}).start();
new Thread(new Runnable() {
public void run()
{
myqueue.put(new Random().nextInt(1000));
}
}).start();
}
}
}
0 0
- java.util.concurrent包(4)——读写锁ReentrantReadWriteLock
- java.util.concurrent.locks.ReentrantReadWriteLock读写锁源码解析
- java.util.concurrent包图文源码解析(三)——ReentrantReadWriteLock
- concurrent包读写锁ReentrantReadWriteLock的使用
- java.util.concurrent并发包结构、锁——博客地址
- java.util.concurrent包(4)——Callable和Future
- java.util.concurrent包
- java.util.concurrent包
- java.util.concurrent包
- java.util.concurrent包
- 深入浅出Java并发包—读写锁ReentrantReadWriteLock原理分析(二)
- 深入浅出Java并发包—读写锁ReentrantReadWriteLock原理分析(一)
- java.util.concurrent包(2)——线程池
- concurrent包:java.util.concurrent.atomic
- java.util.concurrent包介绍(4)——volatile语义
- java.util.concurrent包探秘
- Java.Util.concurrent包学习
- java.util.concurrent.locks包
- C++输出wchar_t和wstring
- support vector machine -note from wiki
- coherent 和NoCoherent的正交IQ频率间隔
- u-boot学习(五):u-boot启动内核
- 代码分析工具推荐Understand
- java.util.concurrent包(4)——读写锁ReentrantReadWriteLock
- 在IOS程序中设置UIButton的字体大小
- Java Web Start为什么能加载pack.gz
- Nginx学习之一-第一个程序Hello World
- leetcode_Reverse Integer
- MongoDB的安装指南
- Numeral.js 是一个用于格式化和数字四则运算的js 库
- example of using ajax in VisualForce page
- android任务栈