没有合适的资源?快使用搜索试试~ 我知道了~
关于读写锁算法的Java实现及思考
3星 · 超过75%的资源 需积分: 10 82 下载量 145 浏览量
2012-04-24
22:33:19
上传
评论 2
收藏 44KB DOC 举报
温馨提示
试读
3页
关于读写锁算法的Java实现及思考关于读写锁算法的Java实现及思考关于读写锁算法的Java实现及思考关于读写锁算法的Java实现及思考关于读写锁算法的Java实现及思考关于读写锁算法的Java实现及思考关于读写锁算法的Java实现及思考
资源推荐
资源详情
资源评论
本文标签:Java
问题背景:多个线程对一个共享的资源进行读写拜访 。写线程中间需求互斥,读线程跟写线程需求互斥,读线程
中间不用互斥 。
早些时候听张 sir 的课,讲述 java5 中加强并发的 性能 。用 java.util.concurrent.locks 中 ReadWriteLock 可以轻松解
决读写锁问题 。我在思量假如没有 ReadWriteLock,单靠 synchronized 可以怎么做呢? 确实, 比较麻烦 。
1. 联结张 sir 传授的面向对象的设计 思维,首先设计一个业务类 Business 作为共享资源,封装
write 跟 read 步骤 。
2.由于 write 必然互斥,所以直接定义
synchronized 。
3.read 中间不要互斥 所以 read 不能直接定义 synchronized 的 然而 write 跟 read 需求互斥 如何操纵 我想到的一个步
骤是在 read 里 加入 synchronized(this){} 同时定义 readThreads 计数器作为信号量 我试想下会浮现下面几种状况:
read[m] 示意某个线程的 read 步骤 。
write[n] 同上
1>read[m]中执行到 synchronized(this){readThreads++;}时 write[n]来了 write[n] 会被本身的 synchronized 堵塞 。
2>read[m]在 do something(此时无锁)时 write[n] 来了 由于 readThreads!=0 而被迫 wait 。
3> 每次 read[m] 完毕时 wait 中的 write[n]会被 notify 但假如发现还有其余的 read 的话 write[n] 不得不无奈地再次
wait 。
4>当 readThreads==0 而且调用 notifyAll 时 read[m] 和 write[n] 会竞争 cpu 假如 write[n]再次落败,则会浮现 1>或 3>
; 假如成了,则如下:
5> 假如 write[n] wait 中醒来占锁,read[m]被堵塞 synchronized(this){readThreads++;}之上 。
6>假如被堵塞的 write[n]占锁,read[m]被堵塞 synchronized(this){readThreads++;}之上 。
从以上看来 read 和 write 是互斥的 。
4.实现细节如下:<如有 舛误欢送指出交换>
1 package communication;
2 import java.util.Random;
3
4 public class ReadWriteLockTest {
5 public static void main(String[] args){
6 final Business business = new Business();
7
8 //启动
4 线程 2 读 2 写
9 for(int i=1;i<=2;i++){
10 new Thread(new Runnable(){
11 public void run() {
12 for(int j=1;j<1000;j++){
13 business.read();
14 try {
15 Thread.sleep(900);
16 } catch (InterruptedException e) {
17 e.printStackTrace();
18 }
19 }
20 }
21 }).start();
22
23 new Thread(new Runnable(){
24 public void run() {
25 Random r = new Random();
26 for(int j=1;j<1000;j++){
27 int i = r.nextInt(100);
达内 java 学习笔记
1
资源评论
- AndyPM2012-07-11不是很详细
- 東北扫地僧2012-06-15关于读写锁算法的Java实现及思考,介绍的还是比较全面的。
- hemaoji2014-03-18用着还可以啦
梦之情缘
- 粉丝: 53
- 资源: 817
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功