【问题标题】:How do i by pass value from my thread to third party api thread and from third party thread change the value to my static variable in Java?我如何将值从我的线程传递到第三方 api 线程并从第三方线程将值更改为我在 Java 中的静态变量?
【发布时间】:2011-09-12 09:01:12
【问题描述】:

如何获取/设置“目标”值?

  • 这样我也可以从其他类或线程中使用它吗?我试过了,但它总是给 null 或什么都不给,而不是向我展示“5”个目标。

Main.java:

public class Main
{
  public static String goal = null;
  public static void main(String[] args)
  {
    System.out.println(goal); // shows: null
    MyFunction1();
    System.out.println(goal); // How many goals happend till now?
  }

  public static void MyFunction1()
  {
    new Thread(new Runnable()
    {
      public void run() 
      {
        CallMe();
        System.out.println("show me: " + goal); // shows nothing.
      }
    }).start();
  }

  public static void CallMe()
  {
      ThirdpartySoftware.Bla().connect(new Bla.STATE()
      { 
        public void stateChanged() 
        {         
           System.out.println("Am i running? yes");    
           goal = "5";
           System.out.println("Did i assigned new value to goal? yes");
        } 
      });     
  }

}

注意:我现在分别尝试触发一个事件 > 新线程作为抽象接口 > 将该接口实现为一个线程,并从该线程将变量分配给主类静态变量。然后监听一个虚拟线程。所以总的来说我可能有: Main > Thread1 > ThirdpartyThred > Abstract interface > Thread2 > Main put/get

【问题讨论】:

  • 问题是你不想看到它的当前值,你想等到它被设置。这个最简单的解决方案是不这样做,并且在设置值之后让您想要运行的代码位于设置值的代码之后而不是其他任何地方。这就是事件驱动回调的用途。
  • 定义一个回调接口,完整方法如下stackoverflow.com/questions/826212/…

标签: java multithreading oop


【解决方案1】:

使用一个完整的方法定义一个回调接口,该方法将任何对象作为参数

在 Thread(或 Runnable)类中,传入对启动线程的类的引用。当线程上的操作完成时,调用回调方法

Java executors: how to be notified, without blocking, when a task completes?

【讨论】:

  • 这无济于事,因为我的听众永远不会结束(它是网络摄像头第三方许可的 SDK)。我需要从中跳出来,以便我可以拥有全局状态,以便从其他线程/类访问。您的建议仍然没有帮助。
【解决方案2】:

您连接到第三方并添加一个侦听器。 然后你检查你的输出。

但是你只添加了一个监听器。稍后当状态改变时,你的目标应该被设定,但没有说连接方法本身会改变它。

【讨论】:

  • 当我运行它时,我看到连接方法执行成功。我在 connect 方法中的目标显示为 5。但是从其他类/线程我看不到目标最后的结果,除了 connect 方法之外,它始终为 null 或什么都没有。
猜你喜欢
  • 2015-02-15
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多