Lock内部实现
来源:互联网 发布:淘宝下载ipad版 编辑:程序博客网 时间:2024/05/08 07:40
代码转:http://my.oschina.net/huangyong/blog/172391
public class ReadWriteLock { private int readThreadCounter = 0; // 正在读取的线程数(0个或多个) private int waitingWriteCounter = 0; // 等待写入的线程数(0个或多个) private int writeThreadCounter = 0; // 正在写入的线程数(0个或1个) private boolean writeFlag = true; // 是否对写入优先(默认为是) // 读取加锁 public synchronized void readLock() throws InterruptedException { // 若存在正在写入的线程,或当写入优先时存在等待写入的线程,则将当前线程设置为等待状态 while (writeThreadCounter > 0 || (writeFlag && waitingWriteCounter > 0)) { wait(); } // 使正在读取的线程数加一 readThreadCounter++; } // 读取解锁 public synchronized void readUnlock() { // 使正在读取的线程数减一 readThreadCounter--; // 读取结束,对写入优先 writeFlag = true; // 通知所有处于 wait 状态的线程 notifyAll(); } // 写入加锁 public synchronized void writeLock() throws InterruptedException { // 使等待写入的线程数加一 waitingWriteCounter++; try { // 若存在正在读取的线程,或存在正在写入的线程,则将当前线程设置为等待状态 while (readThreadCounter > 0 || writeThreadCounter > 0) { wait(); } } finally { // 使等待写入的线程数减一 waitingWriteCounter--; } // 使正在写入的线程数加一 writeThreadCounter++; } // 写入解锁 public synchronized void writeUnlock() { // 使正在写入的线程数减一 writeThreadCounter--; // 写入结束,对读取优先 writeFlag = false; // 通知所有处于等待状态的线程 notifyAll(); }}
简单版本Lock
0 0
- Lock内部实现
- 使用Lock实现信号量
- atom lock的实现
- 锁Lock的实现
- Lock实现线程通信
- 利用lock实现多线程同步
- Lock实现线程的同步
- 实现一个lock的考虑
- 集群环境中实现lock
- 使用Lock实现多线程同步
- synchronized和LOCK的实现
- 使用Lock接口实现同步
- Java锁----Lock实现原理
- 使用synchronized实现一个Lock
- Lock中Condition的实现
- Java锁----Lock实现原理
- BackgroundWork的内部实现
- HASHTABLE的内部实现
- Android打开各种类型的文件方法总结
- python3:(unicode error) 'utf-8' codec can't decode
- 1086. Tree Traversals Again (25)
- JNI 中局部引用和全局引用
- chromium 开发
- Lock内部实现
- win7下 安卓环境搭建
- static 和 const的区别与联系
- HEVC牛人博客
- 111
- C++实现UTF-8编码和Unicode编码互转
- 使用cocoapods的项目如何使用单元测试?
- DUKPT算法简析-3
- 安卓cocos2d游戏开发1.0