读者—写者问题(Readers-Writers problem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进程共享一组数据区,要求:
(1)允许多个读者同时执行读操作;
(2)不允许读者、写者同时操作;
(1)允许多个读者同时执行读操作;
(2)不允许读者、写者同时操作;
(3)不允许多个写者同时操作。一次只能一个写者
实现原理:使用Semapore 信号量 分别表示读者和写者的信号量 读者可以多个同时读,写者只能有一个可以写,使用AtomicInteger定义 readerCount 和writerCount 表示当前读者和当前写者的数量
package test;
import java.util.Random;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ThreadSync {
private static ThreadSync thrdsync;
private static Thread t1, t2, t3, t4, t5;
private static final Random ran