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

解决方案 »

  1.   

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

  2.   

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

  3.   

    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();
    }
    }
    }