在大学的课程中,我们学习Threads
并使用了“忙着等待”的方法来举例说明Car
在TrafficLight
. 对于这个任务,我们构建了三个类:
TrafficLight (implements Runnable)
Car (implements Runnable)
Main
在我们的Main
班级中,我们开始两个Thread
s,一个Car
,和一个TrafficLight
。具有Car
布尔属性hasToWait
。此类中的run()
方法的工作方式是,while
只要hasToWait == true
. 为了改变这一点,我们notifyCar()
在类中有一个方法,Car
由TrafficLight
. 中的run()
方法TrafficLight
运行一个Thread.sleep()
来模拟一定的等待时间。
在我的教授那里一切正常,但最终我遇到了严重的问题。只要类中的while
循环Car
为空。当我输入一个非空的System.out.println()
-时,它可以工作。但如果 Syso 为空,则结果是不显示该方法的 Text。当in为时它也可以工作。比它适用于空循环。Run
Thread.sleep()
TrafficLight
0
while
这是我的代码:
汽车.java:
package trafficlight;
public class Car implements Runnable {
private boolean hasToWait = true;
public void run() {
this.crossTrafficLight();
}
public void crossTrafficLight() {
while(hasToWait){ for(int i = 0; i<20; i++){System.out.println("123");}} // Busy waiting
System.out.println("Auto fährt über Ampel");
}
public void notifyCar() {
this.hasToWait = false;
System.out.println("Test");
}
}
交通灯.java:
package trafficlight;
public class TrafficLight implements Runnable {
private Car car;
public TrafficLight(Car car) {
this.car = car;
}
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.car.notifyCar();
}
}
主.java:
package trafficlight;
public class Main {
public static void main(String[] args){
Car car = new Car();
TrafficLight tl = new TrafficLight(car);
new Thread(car).start();
new Thread(tl).start();
}
}
问题出在哪里?为什么它在我的教授上有效,但在我的电脑上无效?我在我的 Eclipse Juno 中得到了 1:1 的代码,使用JRE 1.7