读者写者问题之写者优先(java)

2008-02-23 10:14:34来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

/*
* 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);

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:企业中的 RMI-IIOP

下一篇:Spring--对业务层的UnitTest