您的位置:首页 > 其它

IPC之读者写者问题:读者优先

2013-04-20 19:39 267 查看
import java.util.concurrent.*;
import java.util.*;

public class ReaderFirst
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new Reader());
executor.execute(new Writer());
executor.shutdown();
}

private static Semaphore mutex = new Semaphore(1);
private static Semaphore db = new Semaphore(1);

private static int data;

private static int readcount = 0;

private static class Reader implements Runnable
{
public void run()
{
try {
while ( true )
{
mutex.acquire();
readcount++;
if ( readcount == 1 )
db.acquire();
mutex.release();

System.out.println("read " + data);

mutex.acquire();
readcount--;
if ( readcount == 0 )
db.release();
mutex.release();

Thread.sleep((int)(Math.random() * 1000));
}
}

catch( InterruptedException ex )
{
ex.printStackTrace();
}
}
}

private static class Writer implements Runnable
{
public void run()
{
try
{
while ( true )
{
db.acquire();

data = (int)(Math.random() * 2312);
System.out.println("\t\t\tWrite " + data);

db.release();

Thread.sleep((int)(Math.random() * 1000));
}
}

catch( InterruptedException ex )
{
ex.printStackTrace();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: