import java.util.concurrent.Semaphore; public class Reader extends Thread { private static volatile int readers = 0; private static final Semaphore mutex = new Semaphore(1); public void run() { try { Reader.mutex.acquire(); Reader.readers++; if (Reader.readers == 1) { Writer.writer.acquire(); } Reader.mutex.release(); //read Reader.mutex.acquire(); Reader.readers--; if (Reader.readers == 0) { Writer.writer.release(); } Reader.mutex.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }