资源简介

自己用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


评论

共有 条评论