-
大小: 61KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-05-24
- 語(yǔ)言: Java
- 標(biāo)簽: 讀者寫者??JAVA??操作系統(tǒng)??
資源簡(jiǎn)介
基于JAVA線程調(diào)度的讀者寫者問(wèn)題,包括讀者優(yōu)先,寫者優(yōu)先,公平競(jìng)爭(zhēng)三種代碼

代碼片段和文件信息
package?raw;
class?DataFile?{
????//表示正在進(jìn)行讀取操作的人數(shù)
????private?int?readerCount;
????//doreading?表示讀信號(hào)量?當(dāng)?doreading?=?true?時(shí)?表示有線程在讀無(wú)法進(jìn)行寫操作
????private?boolean?doreading;
????//dowriting?表示寫信號(hào)量?當(dāng)?dowriting?=?true?時(shí)?表示有線程在寫無(wú)法進(jìn)行讀操作??????如何解決一個(gè)線程在寫讓另外其他的不能寫?
????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)?//?當(dāng)有寫線程在完成寫操作時(shí)??讀線程等待寫線程喚醒
????????{
????????????try?{
????????????????System.out.println(Thread.currentThread().getName()?+?“臨界資源被占用“);
????????????????//等待寫者發(fā)出notify
????????????????wait();
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????????while(true)????
????????{
?????????????if?(www?==?0)?{
????????????????System.out.println(Thread.currentThread().getName()?+?“開始進(jìn)行讀操作“);
????????????????readerCount++;
????????????????break;
????????????}?else?{
????????????????try?{
????????????????wait();
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????????}
????????}
????????if?(readerCount?>=?1)?{
????????????doreading?=?true;
????????}
????????return?readerCount;
????}
????public?synchronized?int?endRead()?//結(jié)束讀操作
????{
????????--readerCount;
????????if?(readerCount?==?0)?{
????????????doreading?=?false;
????????}
????????notifyAll();
????????System.out.println(Thread.currentThread().getName()?+?“讀操作結(jié)束“);
????????if(readerCount==0)
????????{
?????????System.out.println(“此時(shí)無(wú)讀者在讀,臨界資源釋放“);
????????}
????????return?readerCount;
????}
????public?synchronized?void?startWrite()?//開始寫操作
????{
????????www++;
????????while?(doreading?==?true?||?dowriting?==?true)?{
????????????try?{
????????????????System.out.println(Thread.currentThread().getName()?+?“臨界資源被占用“);
????????????????//等待讀者或者寫者發(fā)出信息
????????????????wait();
????????????}?catch?(InterruptedException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????????System.out.println(Thread.currentThread().getName()?+?“開始進(jìn)行寫操作“);
????????dowriting?=?true;
????}
????public?synchronized?void?endWrite()?//結(jié)束寫操作
????{
????????--www;
????????dowriting?=?false;
????????notifyAll();
????????System.out.println(Thread.currentThread().getName()?+?“寫操作結(jié)束,釋放臨界資源“);
????}
}
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();
????????
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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個(gè)文件信息
評(píng)論
共有 條評(píng)論