importjava.io.*;importjava.util.*;publicclassReaderWriter{publicstaticvoidmain(String[]args){booleanboo=true;System.out.println("R-读者优先,W-写者优先");System.out.print...
import java.io.*;
import java.util.*;
public class ReaderWriter
{
public static void main(String[] args)
{
boolean boo=true;
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(s,boo);
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 s,boolean 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;
}
}
}
展开