资源简介
自己用Java实现的读者写者程序。
程序先从txt文本中读取读者写者信息,1 R 3 5为例,1为线程序号,R表示读者,3表示申请操作的时间(秒为单位),5表示操作持续的时间。运行后先选择读者/写者优先,之后按照文本中的描述建立线程,采用信号量机制处理互斥访问。
代码片段和文件信息
import java.io.*;
import java.util.*;
public class ReaderWriter
{
public static void main(String[] args)
{
boolean boo=true;
System.out.println(“读者写者程序 by Jonas:“);
System.out.println(“R-读者优先,W-写者优先“);
System.out.print(“请输入(R or W):“);
while (true)
{
Scanner reader=new Scanner(System.in);
String mode=reader.nextLine();
if (mode.equals(“R“))
{
System.out.println(“读者优先“);
boo=true;
break;
}
else if (mode.equals(“W“))
{
System.out.println(“写者优先“);
boo=false;
break;
}
else
System.out.print(“输入有误请重新输入(R or W):“);
}
int i;
String s=null;
My m[]=new My[10];
try{
BufferedReader br=new BufferedReader(new FileReader(“Input.txt“));
for (i=0;(s=br.readLine())!=null;i++)
{
m[i]=new My(sboo);
System.out.println(“线程“+m[i].a+“是“+m[i].b+“线程第“+m[i].c+“秒申请读写操作操作持续“+m[i].d+“秒“);
}
for (i--;i>=0;i--)
{
m[i].start();
}
}
catch(IOException e){}
}
}
class My extends Thread
{
static boolean mutex=false;
static boolean wmutex=false;
static boolean boo=true;
static int rnum=0;
static int wwait=0;
int a;
String b;
double c;
double d;
My(String sboolean boo)
{
StringTokenizer st=new StringTokenizer(s);
a=Integer.parseInt(st.nextToken());
b=st.nextToken();
c=Double.parseDouble(st.nextToken());
d=Double.parseDouble(st.nextToken());
this.boo=boo;
}
public void run()
{
System.out.println(“线程“+a+“被创建“);
try{
Thread.sleep((int)(1000*c));
}
catch(InterruptedException e){}
if (b.equals(“R“))
{
System.out.println(“线程“+a+“申请读操作“);
if (boo)
while (mutex==true&&wmutex==true){}
else
while (mutex==true&&wmutex==true||wwait>0){}
mutex=true;
rnum++;
System.out.println(“线程“+a+“开始读操作“);
try{
Thread.sleep((int)(1000*d));
}
catch(InterruptedException e){}
System.out.println(“线程“+a+“结束读操作“);
rnum--;
if (rnum==0)
mutex=false;
}
else if (b.equals(“W“))
{
System.out.println(“线程“+a+“申请写操作“);
if (boo)
{
while (mutex==true){}
mutex=true;
while (wmutex==true){}
wmutex=true;
}
else
{
if (mutex==true)
wwait++;
while (mutex==true){}
mutex=true;
while (wmutex==true){}
wmutex=true;
wwait--;
}
System.out.println(“线程“+a+“开始写操作“);
try{
Thread.sleep((int)(1000*d));
}
catch(InterruptedException e){}
System.out.println(“线程“+a+“结束写操作“);
wmutex=false;
mutex=false;
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 56 2010-10-16 09:58 ReaderWriter\Input.txt
文件 2210 2010-10-17 23:08 ReaderWriter\line.class
文件 2208 2010-10-20 11:54 ReaderWriter\My.class
文件 1926 2010-10-20 11:54 ReaderWriter\ReaderWriter.class
文件 2685 2010-10-20 11:53 ReaderWriter\ReaderWriter.java
文件 2685 2010-10-20 11:53 ReaderWriter\ReaderWriter.java.bak
目录 0 2010-10-20 11:54 ReaderWriter
----------- --------- ---------- ----- ----
11770 7
- 上一篇:数据库课程设计大作业--物流快递系统jsp
- 下一篇:java图片编辑工具
相关资源
- java图片编辑工具
- rxtxSerial.dllrxtx+RXTXcomm.jar官方完整包
- 使用java编写的MIPS模拟器
- java程序员职业生涯规划
- Java版仿QQ验证码风格图片验证码
- 北邮java作业3
- 北邮java作业1
- 北邮java作业
- javaweb天气预报
- java 调用 Cplex 使用手册
-
java生成二维码以及二维码转ba
se64字 - google-common.jar
- IEEE 802.3以太网帧封装——javafx可视化
- Java编程 翻译 编写程序,输入数字,
-
javax.xm
l.ws.Service 报错需要的包 - java语言 solitaire 纸牌游戏
- 精简版UC浏览器7.2 Java通用版 适合小内
- Java咖啡厅系统
- java拼图游戏(含源码)
- java 通讯录源码简单易懂
- JavaAgent-agentmain方式
- java 幸运52游戏
- java-根据word模板生成word-freemarker-完整
- Java学生选课系统
- 达内 java 全套视频百度云分享
-
Java通过Ole调用Windows Media Pla
yer - 百度AI人脸比对java
- Java浏览器
- des加密算法java实现
- 保存计算过程的计算器
评论
共有 条评论