避免使用全局变量,同时允许访问另一线程拥有的对象



我正在编写一个使用两个线程的Java程序,一个程序不断地迭代窗口列表并更新其状态,第二个是一个线程,该线程利用秋千来动画一系列基于块的动画在小部件的状态下。

我的问题是,如何获得实现可运行界面的画家,以查看widgetmanager拥有的小部件的阵列列表?而且,这种模式本质上是错误的吗?我被教导要避免全局变量(例如,在MAIN中定义WidgetList(,但是据我了解,由于Run((方法不需要依赖性注入,因此无法传递对可运行线程的引用。

main{
  WidgetManager wm;
  Painter painter;
  painter.run();
  wm.updateWidgets();
}
public class WidgetManager{
  volatile ArrayList<Widget> widgets;
  void updateWidgets(){
    while(true){
      //do some stuff
    }
  }
}
public class Painter implements Runnable{
  public void run(){
    //paint some stuff
  }
}

... run()方法不需要[参数]

run()方法由interface定义。您可以使用implements的任何类的实例创建线程(注意,而不是extends(接口。您的班级可以有实例变量...

public class Painter implements Runnable{
  private ArrayList<Widget> widgets;
  public Painter(ArrayList<Widget> widgets) {
      this.widgets = widgets;
  }
  public void run(){
     paintSomeStuffBasedOnContentOf(widgets);
  }
}

最新更新