我正在编写一个 Java 程序,它使用两个线程,一个线程不断迭代小部件的 ArrayList 并更新其状态,第二个线程利用 swing 根据小部件的状态对一系列 block 进行动画处理。
我的问题是如何让实现 Runnable 接口(interface)的 Painter 查看 WidgetManager 拥有的小部件的数组列表?此外,这种模式本身就是错误的吗?我被教导要避免全局变量(例如在 main 中定义 WidgetList),但据我了解,无法传递对 Runnable 线程的引用,因为 run() 方法不需要依赖注入(inject)。
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
}
}
最佳答案
...the
run()
method requires no [arguments]
run()
方法由接口(interface)
定义。您可以使用任何实现
(注意,不是扩展
)接口(interface)的类的实例来创建线程。你的类可以有实例变量...
public class Painter implements Runnable{
private ArrayList<Widget> widgets;
public Painter(ArrayList<Widget> widgets) {
this.widgets = widgets;
}
public void run(){
paintSomeStuffBasedOnContentOf(widgets);
}
}
关于java - 避免使用全局变量,同时允许访问另一个线程拥有的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56795578/