/*
* Created on 2005-1-9
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Michelangelo
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Database {
/**
*
*/
private static final int NAP_TIME=5;
private int readerCount;
private int writerCount;
private boolean dbReading;
private boolean dbWriting;
public Database() {
super();
readerCount=0;
writerCount=0;
dbReading=false;
dbWriting=false;
// TODO Auto-generated constructor stub
}
public static void napping(){
int sleepTime=(int)(NAP_TIME * Math.random());
try{
Thread.sleep(sleepTime*1000);
}
catch(Exception e){
e.printStackTrace();
}
}
public synchronized int startRead(){
while(writerCount>0){
try{
System.out.println("reader is waiting");
wait();
}
catch(Exception e){
System.out.println(e.toString());
e.printStackTrace();
}
}
readerCount;
if(readerCount==1){
dbReading=true;
}
return readerCount;
}
public synchronized int endReading(){
--readerCount;
if(readerCount==0){
dbReading=false;
}
notifyAll();
System.out.println("one reader is done reading. Count=" readerCount);
return readerCount;
}
public synchronized void startWriting(){
writerCount;
while(dbReading==true||dbWriting==true){
try{
System.out.println("Writer is waiting");
wait();
}
catch(Exception e){
System.out.println(e.toString());
}
}
dbWriting =true;
}
public synchronized void endWriting(){
--writerCount;
dbWriting=false;
System.out.println("one writer is done writing. Count=" writerCount);
notifyAll();
}
}
/*
* Created on 2005-1-9
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Michelangelo
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Reader extends Thread{
/**
*
*/
private Database server;
private int readerNum;
public Reader(int r,Database db) {
super();
readerNum=r;
server=db;
// TODO Auto-generated constructor stub
}
public void run(){
int c;
while(true){
System.out.println("reader " readerNum " is sleeping");
Database.napping();
System.out.println("reader " readerNum " wants to read");
c=server.startRead();
System.out.println("reader " readerNum " is reading. Count=" c);
Database.napping();
c=server.endReading();
System.out.println("It is reader " readerNum " who has done reading according to count=" c);
}
}
}
/*
* Created on 2005-1-9
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Michelangelo
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Writer extends Thread{
private Database server;
private int writerNum;
/**
*
*/
public Writer(int w,Database db) {
super();
writerNum=w;
server=db;
// TODO Auto-generated constructor stub
}
public void run(){
while(true){
System.out.println("Writer " writerNum " is sleeping");
Database.napping();
System.out.println("Writer " writerNum " wants to write");
server.startWriting();
System.out.println("Writer " writerNum " is writing");
Database.napping();
server.endWriting();
System.out.println("It is Writer " writerNum " who has done writing .");
}
}
}
/*
* Created on 2005-1-9
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Michelangelo
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class DatabaseServer {
/**
*
*/
public DatabaseServer() {
super();
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Database db=new Database();
Reader r1=new Reader(1,db);
Reader r2=new Reader(2,db);
Reader r3=new Reader(3,db);
Reader r4=new Reader(4,db);
Writer w1=new Writer(1,db);
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




