Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图理解多对象的线程间通信_Java_Multithreading_Synchronized - Fatal编程技术网

Java 试图理解多对象的线程间通信

Java 试图理解多对象的线程间通信,java,multithreading,synchronized,Java,Multithreading,Synchronized,我将首先给出一些关于我的小程序的上下文,然后我将详细阐述我的问题 上下文: 我有一个程序,允许汽车从左侧或右侧过桥,但是,桥太小了,一次只能有一辆汽车过桥。现在,为了防止撞车,我实现了一个控制器类,它确保在同一时间只有一辆车在过桥 公共类桥联控制器{ 私有布尔值IsBridgeOccessed=false; 公共同步的void enterLeft(){ 试一试{ 同时(有人占用){ 等待(); } IsBridge=true; }捕捉(中断异常e){ e、 printStackTrace();

我将首先给出一些关于我的小程序的上下文,然后我将详细阐述我的问题

上下文:
我有一个程序,允许汽车从左侧右侧过桥,但是,桥太小了,一次只能有一辆汽车过桥。现在,为了防止撞车,我实现了一个控制器类,它确保在同一时间只有一辆车在过桥

公共类桥联控制器{
私有布尔值IsBridgeOccessed=false;
公共同步的void enterLeft(){
试一试{
同时(有人占用){
等待();
}
IsBridge=true;
}捕捉(中断异常e){
e、 printStackTrace();
}
}
公共已同步的无效enterRight(){
试一试{
同时(有人占用){
等待();
}
IsBridge=true;
}捕捉(中断异常e){
e、 printStackTrace();
}
}
公共同步的void left(){
IsBridge=false;
notifyAll();
}
公共权限(){
IsBridge=false;
notifyAll();
}
}
问题:
假设桥的两边都有100万辆车在等着。如果我正确理解了我的实现,那么汽车穿过道路的顺序应该是随机的。在我执行程序查看其工作原理后,我意识到交叉是迭代发生的

R/L显示车辆是从R右侧进入驾驶台还是从L左侧进入驾驶台

期望值:
rrllrllllrrrrrrrrl
可能是您没有向我们展示的代码,也就是说,它与上述类别无关。
每辆车都包含一个BridgeController
这让我担心。你们总共有多少个桥牌控制器?肯定不是一百万美元,我错了。只有一个
BridgeController
。此外,每个
Car
线程中执行。。因此,创建后由调度程序决定。显示使用此控制器的代码。由于在切换方向时存在额外的延迟,因此在切换之前,您可能应该在一个方向上拥有最少数量的车辆。就像在现实生活中一样。