我正在编写一个使用两个线程的 Java 程序,一个用于不断迭代小部件的 ArrayList 并更新它们的状态,第二个是一个线程利用 swing 根据小部件的状态为一系列块设置动画。我的问题是如何让实现 Runnable 接口的 Painter 看到 WidgetManager 拥有的小部件的数组列表?此外,这种模式本身就存在缺陷吗?我被教导要避免使用全局变量(例如在 main 中定义 WidgetList),但据我了解,没有办法将引用传递给 Runnable 线程,因为 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 }}
1 回答

慕桂英3389331
TA贡献2036条经验 获得超8个赞
...该run()方法不需要 [arguments]
该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);
}
}
添加回答
举报
0/150
提交
取消