JAVA两个线程怎么同步_java – 如何两个线程都在“同步”方法中

本文探讨了一个Java并发编程的问题,涉及到多线程模拟车辆在停车场的活动。车辆由线程代表,尝试在随机空闲车位停车。当前的实现中,当两辆相同的车同时尝试停车时,会出现一辆车必须等待的情况,而目标是让它们能同时停车。作者提出了使用同步锁来解决这个问题,但遇到了困境。讨论了如何改进同步策略,以允许并发访问并避免死锁或资源争抢。
摘要由CSDN通过智能技术生成

我真的是一个新的Java并发,我试图实现以下规范:

>我们有一个停车场,有一些公园点

>每辆车都代表一个线程,无休止地将车辆状态从驾驶 – 停车场改变.每辆车都有自己的停车位.

>当汽车处于停车状态时,它试图停放在一个地方(不需要他的地点).如果现场是空闲的,那么它会停下来,它将跳过这个停车阶段,然后返回开车.

>汽车仍然在现场,除非现场的所有者想要停车.

这不是确切的规范,但我唯一的问题是:

我不能让车跳过转弯.如果两辆车相同,那么一辆停车,另一辆车正在等待直到公园是空的.哪个不是我想要的巴佬.

我的第一个想法是简单地将读取和写入同步到被占用的变量:

class Car implements Runnable {

private CarState state = CarState.driving

run {

while(true) {

switch(state) {

case driving:

System.out.println(this + " driving.");

state = parking;

break;

case parking: Spot s = CarPark.getRandomSpot();

if(s.willingToPark(this)) {

System.out.println(s + " occupied. " + this

+ " skip park turn.");

} else {

s.park(this);

}

state = driving;

}

}

}

}

class Spot {

private boolean occupied = false;

private Car owner = new Car(...);

synchronized boolean willingToPark(Car c) {

if(occupied) {

return true;

} else {

occupied = true;

return false;

}

synchronized void park(Car c) {

System.out.println(c + " parking at " + this);

//don't care how this is implemented, just keep in mind

//that it will enter in a loop until the owner came back.

occupied = false;

}

}

如果我用三辆车跑,那么我最终会把car0停在spot1,car1停在spot0,car2在spot0上等待,因为car1正在执行同步停车场(Car c).我不知道如果愿意同步的话,两辆车可以停在同一个地方.

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值