【问题标题】:How to allow threads to modify/get info between each other?如何允许线程在彼此之间修改/获取信息?
【发布时间】:2014-05-03 12:37:51
【问题描述】:

我的问题更多是关于编程模式而不是具体案例。

我想知道如何更好地管理并发线程之间的交互。

比如说我有那个:

Class Ocean implements Runnable {
   Boat myBoat;

   // standard stuff

   @Override
   public void run(){
      // the boat navigates through the sees…
   }
}

以下是不同的线程,因为它必须同时运行:

Class Radar implements Runnable {

    // standard stuff

    public int scanOcean(){
        // return boat.position();
    }
}

例如,这两个类都是我的 Main 方法的对象。

现在的问题是:如何访问另一个线程中的方法?我查了一下,但找不到任何一致且实用的答案……

有些网站引用了可能被另一个线程使用的字段的 volatile 声明,有些介绍了事件侦听器,有些介绍了事件处理程序……我应该使用标准的观察者/主题模式吗?

谢谢!

银鸭

【问题讨论】:

  • 这取决于您的用例。有多种可能的解决方案,没有一种适合所有人。
  • 是的,我可以想象。但是现在我正在开发一个与我举的例子大致相同的应用程序:)

标签: java multithreading events handlers


【解决方案1】:

我在使用中间辅助对象方面取得了很好的经验,它只保存要在线程之间共享的状态信息、中止标志等要共享的数据。这并不适合所有情况,但对我来说经常如此。

helper 实例应根据需要在其方法、getter 和 setter 中实现(并封装)锁定,因此您不必在外部处理它。

一致、线程安全、易于使用。

【讨论】:

  • 谢谢,听起来对我的项目可行!我会用它做一些试验。
猜你喜欢
  • 2019-08-25
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2012-06-10
  • 1970-01-01
  • 2021-01-11
相关资源
最近更新 更多