猿问

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

我正在编写一个使用两个线程的 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

  }

}


慕森卡
浏览 73回答 1
1回答

慕桂英3389331

...该run()方法不需要 [arguments]该run()方法由interface. implements您可以使用(注意,不是extends)接口的任何类的实例来创建您的线程。你的类可以有实例变量......public class Painter implements Runnable{&nbsp; private ArrayList<Widget> widgets;&nbsp; public Painter(ArrayList<Widget> widgets) {&nbsp; &nbsp; &nbsp; this.widgets = widgets;&nbsp; }&nbsp; public void run(){&nbsp; &nbsp; &nbsp;paintSomeStuffBasedOnContentOf(widgets);&nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答