java 进程同步代码_java实现进程同步

读者-写者问题的读写操作限制(包括读者优先和写者优先):1)写-写互斥,即不能有两个写者同时进行写操作。2)读-写互斥,即不能同时有一个线程在读,而另一个线程在写。3)读-读允许,即可...

读者-写者问题的读写操作限制(包括读者优先和写者优先):

1) 写-写互斥,即不能有两个写者同时进行写操作。

2) 读-写互斥,即不能同时有一个线程在读,而另一个线程在写。

3) 读-读允许,即可以有一个或多个读者在读。

读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。

写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作

这是我的代码:

public class Test implements Runnable{

private String num;

private char name;

private int num3;

private int num4;

private static Object lock = new Object();

public static void main(String[] args) {

for(int i=1;i<8;i++){

//Random random = new Random();

Thread th=null;

String chars = "RW";

// System.out.println(chars.charAt((int)(Math.random() *2)));

Test ts = new Test(Integer.toString(i),chars.charAt((int)(Math.random() *2)), (int)(1+Math.random()*(5-1+1)),(int)(1+Math.random()*(5-1+1)));

th = new Thread(ts);

th.start();

}

}

public void run(){

try {

Thread.sleep(100);

if(name=='R'){

read();

}

else if(name == 'W'){

synchronized (lock) {

write();

}

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public Test(String a,char b,int c ,int d){

this.num=a;

this.name=b;

this.num3=c;

this.num4=d;

}

public void read(){

try {

Thread.currentThread().setName(String.valueOf(num));

Thread.sleep(num3 * 1000);

System.out.println(Thread.currentThread().getName() + "-开始读文件");

Thread.sleep(num4 * 1000);

System.out.println(Thread.currentThread().getName() + "我正在读文件");

Thread.sleep(100);

System.out.println(Thread.currentThread().getName() + "-文件读完了");

} catch (InterruptedException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

public void write(){

try {

Thread.currentThread().setName(String.valueOf(num));

Thread.sleep(num3 * 1000);

System.out.println(Thread.currentThread().getName()

+ "-开始写文件");

Thread.sleep(num4 * 1000);

System.out.println(Thread.currentThread().getName()

+ "-文件写完了");

} catch (InterruptedException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

}

只能实现写-写互斥和读-读允许,其他不行,求详解

展开

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值