CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 扩展类

求一个比较优秀的多线程算法!

楼主PiouseLeo(永不褪色的SB )2006-05-04 12:57:09 在 Java / J2SE / 扩展类 提问

多线程服务器,可同时向多个客户端发送信息,信息存放在byte[]缓存中,服务器可以修改缓存,如果修改此缓存的同时,正在读取并发送缓存里的信息,那么就可能出现问题!目标是要实现服务器改写缓存的时候,任何线程都不能读取缓存,而服务器不改写缓存的时候,多个线程可以同时读取缓存,请问有没有什么好的算法或者设计模式可以实现以上功能? 问题点数:20、回复次数:7Top

1 楼lbfhappy(千里冰封)回复于 2006-05-04 18:50:19 得分 0

可以在服务器写缓存的时间,设置一个标志,说明此时此文件正在被服务器所修改,所有的线程都不能访问,当服务器写完了以后,就把这个标志设为可以就行了  
  这个标志可以是一个文件,也可以是内存里的一个变量Top

2 楼PiouseLeo(永不褪色的SB )回复于 2006-05-04 19:12:09 得分 0

但是如果已经有线程开始读取缓存了(并未读完),此时服务器要修改缓存怎么办?Top

3 楼bbflyerwww()回复于 2006-05-04 20:15:09 得分 0

即使感觉上的同时读,实际上也不是同时的。多线程实际上就类似一个多个线程的时间片轮转吧。所以设置成进程同步应该没问题吧   synchronizedTop

4 楼ErikChen1985()回复于 2006-05-04 22:45:01 得分 0

有看过一本书《Java多线程设计模式》吗?这个就叫Read-Write   Lock   Pattern。就是读的时候没有线程冲突问题,写就有。这时候就要自己写一个管理线程冲突的类。代码我就不发了,很长。Top

5 楼jshi123()回复于 2006-05-05 10:08:21 得分 20

public   class   Buffer   {  
  static   private   byte[]   buffer   =   new   byte[..];  
  static   Lock   readLock   =   new   ReentrantLock();  
  static   Condition   canWrite   =   lock.newCondition();  
  static   int   writeLock   =   0;  
   
  public   void   writeBuffer()   throws   InterruptedException   {  
  readLock.lock();  
  try   {  
  while   (writeLock   >   0)   {  
  canWrite.await();  
  }  
  doWriteBuffer(...);  
  }  
  finally   {  
  readLock.unlock();  
  }  
  }  
   
  public   void   readBuffer()   throws   InterruptedException   {  
  readLock.lock();  
  writeLock   ++;  
  readLock.unlock();  
  try   {  
  doReadBuffer(...);  
  }  
  finally   {  
  writeLock--;  
  canWrite.signal();  
  }  
  }  
  }  
   
  Top

6 楼greenkugua(跋涉者)回复于 2006-05-05 22:36:00 得分 0

你看看操作系统就知道并发控制了,这个一般大学操作系统课都讲的很明白的Top

7 楼ErikChen1985()回复于 2006-05-05 22:54:57 得分 0

那也不用看操作系统这么夸张,看看多线程设计模式就可以了。Top

相关问题

关键词

得分解答快速导航

  • 帖主:PiouseLeo
  • jshi123

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo