资源简介
自己用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源码,servlet+jsp),适
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
评论
共有 条评论