我正在编写一个使用两个线程的Java程序,一个线程不断地在小部件的ArrayList上迭代并更新它们的状态,第二个线程是一个利用swing来基于小部件的状态为一系列块设置动画的线程。 / p>
我的问题是如何获取实现Runnable接口的Painter以查看WidgetManager拥有的小部件的数组列表?而且,这种模式天生就有缺陷吗?我被教导要避免使用全局变量(例如,在main中定义WidgetList),但据我了解,由于run()方法不需要依赖项注入,因此无法将引用传递给Runnable线程。
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
}
}
答案 0 :(得分:2)
...
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);
}
}