Java 实现读者与写者.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java 实现读者与写者

Java 实现读者与写者 写者优先public class WriterReader { ?public static void main(String[] args) { ? ? CubbyHole db=new? CubbyHole();//缓冲区 ? 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);//写者 ? Writer w2=new Writer(2,db); ? ? r1.start(); ? r2.start(); ? r3.start(); ? w1.start(); ? r4.start(); ? w2.start(); ? ?} } ?class CubbyHole { ?private int readerCount;//读者数 ?private int writerCount;//写者数 ?private boolean dbReading;//读信号量 ?private boolean dbWriting;//写信号量 ? ?public CubbyHole() { ? readerCount=0; ? writerCount=0; ? dbReading=false; ? dbWriting=false; ? ?} ??? ?public static void napping(){//线程睡眠,不消耗CPU资源 ? ? try{ ?? Thread.sleep((int)(Math.random() * 4000)); ? } ? catch(Exception e){ ?? ? } ?} ? ?public synchronized int startRead(){//开始读 ? while(writerCount0){ ?? try{ ??? System.out.println(reader is waiting); ??? wait();//等待写者发出notify ?? } ?? catch(Exception e){ ?? } ? } ? ++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();//等待读者发出notify ?? } ?? catch(Exception e){ ?? } ?? ? } ? dbWriting =true; ?} ? ?public synchronized void endWriting(){//结束写 ? --writerCount; ? dbWriting=false; ? System.out.println(one writer is done writing. Count=+writerCount); ? ? notifyAll(); ?} ? } ?class Reader extends Thread{//定义读线程,继承Thread类,重写run方法 ?private CubbyHole C; ?private int readerNum; ? ?public Reader(int r,CubbyHole db) { ? readerNum=r; ? C=db; ?} ? ?public void run(){ ? int c; ? while(true){ ?? System.out.println(reader +readerNum+ is sleeping); ?? CubbyHole.napping(

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档