手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

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

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

/*
* 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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!