Java之多线程锁
来源:互联网 发布:c语言返回值什么意思 编辑:程序博客网 时间:2024/05/18 02:52
锁的实现
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那点事儿
Unsafe与CAS
Java锁的种类以及辨析
ReentrantLock实现原理深入探究
Java 线程并发中常见的锁
深入浅出java同步器AQS
http://www.jianshu.com/p/d8eeb31bee5c
java中的CAS
http://www.jianshu.com/p/fb6e91b013cc
深入浅出synchronized
http://www.jianshu.com/p/19f861ab749e
深入浅出ReentrantLock
http://www.jianshu.com/p/4358b1466ec9
java中的Unsafe
http://www.jianshu.com/p/a16d638bc921
java volatile关键字解惑
http://www.jianshu.com/p/195ae7c77afe
深入分析Object.wait/notify实现机制
http://www.jianshu.com/p/f4454164c017
深入分析synchronized的JVM实现
http://www.jianshu.com/p/c5058b6fe8e5
0 0
- Java之多线程锁
- 【Java】Java之多线程
- Java学习之多线程
- java基础教程之多线程
- java之多线程
- Java学习之多线程
- java基础之多线程
- Java之多线程
- java基础之多线程
- Java基础之多线程
- JAVA之多线程
- java之多线程
- Java之多线程编程
- java面试之多线程
- java之多线程认识
- java之多线程实例
- java基础之多线程
- java基础之多线程
- 安全起见,小心使用C语言realloc()函数
- xUtils源码阅读(3)-ImageManagerImpl
- Hibernate的核心API
- 8月房价上涨城市数量增多 涨幅全线扩大
- Linux ALSA声卡驱动之一:ALSA架构简介
- Java之多线程锁
- 策略模式【Strategy Pattern】
- 关于flask中文件下载的实例
- ARP协议解析
- JS加PHP动态倒计时(定时器)
- 再论EM算法的收敛性和K-Means的收敛性
- flv文件格式解析
- C#正则表达式
- NHibernate实践之----事务