求一个比较优秀的多线程算法! 多线程服务器,可同时向多个客户端发送信息,信息存放在byte[]缓存中,服务器可以修改缓存,如果修改此缓存的同时,正在读取并发送缓存里的信息,那么就可能出现问题!目标是要实现服务器改写缓存的时候,任何线程都不能读取缓存,而服务器不改写缓存的时候,多个线程可以同时读取缓存,请问有没有什么好的算法或者设计模式可以实现以上功能? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 即使感觉上的同时读,实际上也不是同时的。多线程实际上就类似一个多个线程的时间片轮转吧。所以设置成进程同步应该没问题吧 synchronized 有看过一本书《Java多线程设计模式》吗?这个就叫Read-Write Lock Pattern。就是读的时候没有线程冲突问题,写就有。这时候就要自己写一个管理线程冲突的类。代码我就不发了,很长。 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(); } }} StingBuffer 本人能力不行 请能力强的进入帮忙 继承interface后,访问权限变小的问题 一个和tomcat 相关的问题 如何将JOptionPane中消息框按钮上的字改成英文。急! 一个APPLICATION的聊天室,怎样让对方可以直接用?对方没有JAVA环境 请问:.java.bak是什么文件呀??? 请问如何用java调用oracle函数 哥们想考计算机研究生,但英语差点,哪位知道帮助学英语的网站吗? 有关参数传递错误的问题向各位请教。 关于Graphics这个抽象类的疑问 上传图片到server,是传到database中,还是传到server的磁盘文件?
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();
}
}
}