資源簡介
基于JAVA線程調度的讀者寫者問題,包括讀者優先,寫者優先,公平競爭三種代碼

代碼片段和文件信息
package?raw;
class?DataFile?{
????//表示正在進行讀取操作的人數
????private?int?readerCount;
????//doreading?表示讀信號量?當?doreading?=?true?時?表示有線程在讀無法進行寫操作
????private?boolean?doreading;
????//dowriting?表示寫信號量?當?dowriting?=?true?時?表示有線程在寫無法進行讀操作??????如何解決一個線程在寫讓另外其他的不能寫?
????private?boolean?dowriting;
????private?int?www;
????public?DataFile()?{
????????readerCount?=?0;
????????doreading?=?false;
????????dowriting?=?false;
????????www?=?0;
????}
????public?static?void?naps()?{
????????try?{
????????????Thread.sleep((int)?(4000?*?Math.random()));
????????}?catch?(InterruptedException?e)?{
????????????e.printStackTrace();
????????}
????}
????public?synchronized?int?startRead()?//開始讀操作
????{
????????while?(dowriting?==?true)?//?當有寫線程在完成寫操作時??讀線程等待寫線程喚醒
????????{
????????????try?{
????????????????System.out.println(Thread.currentThread().getName()?+?“臨界資源被占用“);
????????????????//等待寫者發出notify
????????????????wait();
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????????while(true)????
????????{
?????????????if?(www?==?0)?{
????????????????System.out.println(Thread.currentThread().getName()?+?“開始進行讀操作“);
????????????????readerCount++;
????????????????break;
????????????}?else?{
????????????????try?{
????????????????wait();
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????????}
????????}
????????if?(readerCount?>=?1)?{
????????????doreading?=?true;
????????}
????????return?readerCount;
????}
????public?synchronized?int?endRead()?//結束讀操作
????{
????????--readerCount;
????????if?(readerCount?==?0)?{
????????????doreading?=?false;
????????}
????????notifyAll();
????????System.out.println(Thread.currentThread().getName()?+?“讀操作結束“);
????????if(readerCount==0)
????????{
?????????System.out.println(“此時無讀者在讀,臨界資源釋放“);
????????}
????????return?readerCount;
????}
????public?synchronized?void?startWrite()?//開始寫操作
????{
????????www++;
????????while?(doreading?==?true?||?dowriting?==?true)?{
????????????try?{
????????????????System.out.println(Thread.currentThread().getName()?+?“臨界資源被占用“);
????????????????//等待讀者或者寫者發出信息
????????????????wait();
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????????System.out.println(Thread.currentThread().getName()?+?“開始進行寫操作“);
????????dowriting?=?true;
????}
????public?synchronized?void?endWrite()?//結束寫操作
????{
????????--www;
????????dowriting?=?false;
????????notifyAll();
????????System.out.println(Thread.currentThread().getName()?+?“寫操作結束,釋放臨界資源“);
????}
}
class?Reader?implements?Runnable?{
????private?int?readerNum;
????private?DataFile?df;
????Reader(int?readerNum?DataFile?df)?{
????????this.readerNum?=?readerNum;
????????this.df?=?df;
????}
????public?void?run()?{
????????df.naps();
????????df.startRead();
????????df.naps();
????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-23?12:07??RAW\
?????文件????????3594??2018-05-23?11:56??RAW\build.xm
?????目錄???????????0??2018-05-23?12:07??RAW\build\
?????目錄???????????0??2018-05-23?12:07??RAW\build\classes\
?????文件???????????0??2018-05-23?12:07??RAW\build\classes\.netbeans_automatic_build
?????文件???????????0??2018-05-23?12:07??RAW\build\classes\.netbeans_update_resources
?????目錄???????????0??2018-05-23?12:07??RAW\build\classes\raw\
?????文件????????2237??2018-05-23?12:07??RAW\build\classes\raw\DataFile.class
?????文件????????1112??2018-05-23?12:07??RAW\build\classes\raw\RAW.class
?????文件??????????47??2018-05-23?12:07??RAW\build\classes\raw\RAW.rs
?????文件?????????605??2018-05-23?12:07??RAW\build\classes\raw\Reader.class
?????文件?????????599??2018-05-23?12:07??RAW\build\classes\raw\Writer.class
?????文件??????????85??2018-05-23?11:56??RAW\manifest.mf
?????目錄???????????0??2018-05-23?11:56??RAW\nbproject\
?????文件???????79614??2018-05-23?11:56??RAW\nbproject\build-impl.xm
?????文件?????????475??2018-05-23?11:56??RAW\nbproject\genfiles.properties
?????目錄???????????0??2018-05-23?12:10??RAW\nbproject\private\
?????文件?????????112??2018-05-23?11:56??RAW\nbproject\private\private.properties
?????文件?????????427??2018-05-23?12:10??RAW\nbproject\private\private.xm
?????文件????????2461??2018-05-23?11:56??RAW\nbproject\project.properties
?????文件?????????511??2018-05-23?11:56??RAW\nbproject\project.xm
?????目錄???????????0??2018-05-23?11:56??RAW\src\
?????目錄???????????0??2018-05-23?11:56??RAW\src\raw\
?????文件????????4527??2018-05-23?12:07??RAW\src\raw\RAW.java
?????目錄???????????0??2018-05-23?11:57??RAW\test\
?????目錄???????????0??2018-05-22?22:33??RW\
?????文件????????3591??2018-05-22?21:54??RW\build.xm
?????目錄???????????0??2018-05-22?22:33??RW\build\
?????目錄???????????0??2018-05-22?22:33??RW\build\classes\
?????文件???????????0??2018-05-22?22:33??RW\build\classes\.netbeans_automatic_build
?????文件???????????0??2018-05-22?22:33??RW\build\classes\.netbeans_update_resources
............此處省略48個文件信息
評論
共有 條評論