【发布时间】:2016-04-19 06:48:17
【问题描述】:
我试图通过有 2 个线程在 java 中使用多线程,其中一个线程表示一辆汽车单向行驶通过十字路口,另一个表示另一辆汽车等待通过十字路口。我的问题是 car2 打印出“car2 is waiting to cross”的次数多于应有的次数(它应该只打印 6 次)。我尝试过使用同步,但这不起作用。它是一个非常简单的程序,我试图帮助自己理解多线程,如下所示。
public class Drive {
public static Thread car1;
public static Thread car2;
public static void main(String[]args){
Cars cars = new Cars();
car1 = new Thread(cars, "car 1");
car2 = new Thread(cars, "car 2");
car1.start();
car2.start();
}
}
public class Cars implements Runnable{
int distance = 0;
public void increaseDistance(){
distance ++;
}
public void race(){
while(distance <= 5){
if(Thread.currentThread().getName().equals("car 1")){
System.out.println("Distance covered by " + Thread.currentThread().getName() + " is " + distance + " meters");
increaseDistance();
}
if(Thread.currentThread().getName().equals("car 2")){
System.out.println(Thread.currentThread().getName() + " is waiting to cross");
}
}
}
public void run(){
race();
}
}
输出低于...
car 2 is waiting to cross
car 2 is waiting to cross
car 2 is waiting to cross
car 2 is waiting to cross
car 2 is waiting to cross
Distance covered by car 1 is 0 meters
car 2 is waiting to cross
Distance covered by car 1 is 1 meters
Distance covered by car 1 is 2 meters
Distance covered by car 1 is 3 meters
Distance covered by car 1 is 4 meters
Distance covered by car 1 is 5 meters
car 2 is waiting to cross
它说“汽车 2 正在等待通过”应该打印出与“汽车 1 覆盖的距离是 x 米”相同的次数,但每次都是随机的?
【问题讨论】:
-
应该打印相同的次数 为什么?尝试多次运行程序并比较结果。
-
因为 car2 只等到 car1 越过
-
你说'但每次都是随机的'。是的。每次都是随机的。欢迎来到多线程开发的世界。
-
它的打印顺序是随机的,因为它们都同时运行,但它们应该都打印出相同的次数
标签: java multithreading