gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:48:56 24 4
gpt4 key购买 nike

我正在编写一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com