如何在Java中访问runnable对象中的变量

Tha*_*han 3 java multithreading volatile runnable

我将模拟交通灯系统.我创建了Road类,它扩展了JFrame并实现了Runnable.

在run()方法中,我添加了逻辑来增加每辆车的Y位置,现在它正在模拟汽车的运动.但是现在我需要在移动汽车之前检查交通信号灯的状态.

这是我的TrafficLight类,

import java.util.Random;

public class TrafficLight implements Runnable {

volatile boolean stop;

public TrafficLight(boolean stop) {
    this.stop = stop;
}

@Override
public void run() {
    Random randomGenerator = new Random();
    while (true) {
        if (stop) {
            stop = false; //change current status
        } else {
            stop = true;  //change current status
        }
        try {
            Thread.sleep(2000 + randomGenerator.nextInt(2000));
        } catch (Exception ex) {
            System.out.println("error");
        }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法从我的Road Class 检查这个volatile变量stop.

如果没有,请建议我做另一个解决方案.

谢谢.

Ant*_*oly 7

实现一个访问停止.

public class TrafficLight implements Runnable {

   volatile boolean stop;

   // Irrelevant code

   public boolean isStop() {
     return stop;
   }
}
Run Code Online (Sandbox Code Playgroud)

收到TrafficLightRoad类的构造函数,并用它来获得访问stop变量

public class Road implements Runnable {

   private TrafficLight trafficLight;

   public Road (TrafficLight trafficLight) {
     this.trafficLight = trafficLight;     
   }

   @Override
   public void run() {
     // Irrelevant code
     if(trafficLight.isStop()) {
       // do something
     } 
   }
}
Run Code Online (Sandbox Code Playgroud)