Read-Write lock 看可以,不过看的时候不能写
来源:互联网 发布:淘宝商城分销平台 编辑:程序博客网 时间:2024/04/20 14:58
当线程“读取”实例的状态时,实例的状态不会改变,只有线程对实例“写入”操作时才会改变。read-write lock 模式将读取和写入分开来处理,在读取数据前获取读锁定,而写入之前,必须获取写锁定。
public class ReadWriteThreadTest { public static void main(String[] args) { Data data = new Data(5); new ReaderThread(data).start(); new ReaderThread(data).start(); new ReaderThread(data).start(); new ReaderThread(data).start(); new WriterThread(data, "asdfghjk").start(); }}class Data { private final char[] buffer; private final ReadWriteLock lock = new ReentrantReadWriteLock(); Lock read = lock.readLock(); Lock write = lock.writeLock(); public Data(int size) { this.buffer = new char[size]; for (int i = 0; i < buffer.length; i++) { buffer[i] = '*'; } } public char[] read() { read.lock(); try { return doRead(); } finally { read.unlock(); } } public void write(char c) { write.lock(); try { doWrite(c); } finally { write.unlock(); } } private void doWrite(char c) { for (int i = 0; i < buffer.length; i++) { buffer[i] = c; try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } private char[] doRead() { char[] newbuf = new char[buffer.length]; for (int i = 0; i < buffer.length; i++) { newbuf[i] = buffer[i]; } try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } return newbuf; }}class WriterThread extends Thread { private static final Random random = new Random(); private final Data data; private final String filter; private int index; public WriterThread(Data data, String filter) { this.index = 0; this.data = data; this.filter = filter; } @Override public void run() { try { while (true) { char c = nextchar(); data.write(c); Thread.sleep(random.nextInt(3000)); } } catch (InterruptedException e) { e.printStackTrace(); } } private char nextchar() { char c = filter.charAt(index); index++; if (index >= filter.length()) { index = 0; } return c; }}class ReaderThread extends Thread{ private final Data data; public ReaderThread(Data data) { this.data=data; } @Override public void run() { while(true){ char[] readbuf = data.read(); System.out.println(Thread.currentThread().getName() + " reads " + String.valueOf(readbuf)); } }}
0 0
- Read-Write lock 看可以,不过看的时候不能写
- 第六章 Read-Write Lock(适合读取比写入次数频繁的时候)
- Read/Write Lock
- IPC Read/Write Lock
- Read-Write-Lock 模式
- Read-Write-Lock 模式
- Read Write Lock Implementation
- Read-Write Lock Pattern
- 没事的时候可以看一下,学习一下
- 没事干的时候可以看这些,超全超多…
- 没事干的时候可以看这些,超全超多…
- 用IDA看ntdll的时候写的
- 使用AVAudioRecorder录音的时候模拟器可以录音但是真机不能录音的朋友来看看,这个方法可以解决你的问题哦
- 不能下载的可以看源码的直接下载
- WINCE 写SQLiet的时候提示Attempt to write a read-only database
- 监看lock的script
- 监看lock的script
- 可以看的东西
- linux调整系统的时间
- JQGrid 备忘
- 配置使用yii 自动化代码生成工具gii(脚手架)
- 如何在Win7中建立可以远程访问却无法本地登录的账户?
- SVN 多人修改,如何管理 关于版本的问题
- Read-Write lock 看可以,不过看的时候不能写
- ORACLE EXP不能导出空表的原因分析及解决方法
- digestion of file system of minix 3.1.8
- 解读linux对string.h函数的实现
- android中反射技术使用实例
- Java快速复制文件
- 预处理预编译(C++)
- HOWTO: Be more productive
- MFC从多个EDIT中读取和保存文件