Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在观察者模式中处理大量观察者,以便在w.r.t.时间内高效更新_Java - Fatal编程技术网

Java 如何在观察者模式中处理大量观察者,以便在w.r.t.时间内高效更新

Java 如何在观察者模式中处理大量观察者,以便在w.r.t.时间内高效更新,java,Java,如果我有大量的观察者(50+),那么我应该如何对观察者调用update()。我不想逐个处理更新。是否有其他有效的方法来组织观察者进行更新有几种可能性: Java有几个非常优化的EventBus实现,例如Guava。您可以将它们配置为使用多个线程更新所有观察者 或者,您可以使用一个线程池并创建一个新线程来更新,比如说20个观察者。您需要使用线程池,这样就不会每次都创建新线程,而是重用旧线程 如果许多观察者执行相同的代码,您可以让一个助手对象执行该代码,而让其他观察者观察该助手对象 有几种可能性:

如果我有大量的观察者(50+),那么我应该如何对观察者调用update()。我不想逐个处理更新。是否有其他有效的方法来组织观察者进行更新有几种可能性:

  • Java有几个非常优化的EventBus实现,例如Guava。您可以将它们配置为使用多个线程更新所有观察者
  • 或者,您可以使用一个线程池并创建一个新线程来更新,比如说20个观察者。您需要使用线程池,这样就不会每次都创建新线程,而是重用旧线程
  • 如果许多观察者执行相同的代码,您可以让一个助手对象执行该代码,而让其他观察者观察该助手对象

  • 有几种可能性:

  • Java有几个非常优化的EventBus实现,例如Guava。您可以将它们配置为使用多个线程更新所有观察者
  • 或者,您可以使用一个线程池并创建一个新线程来更新,比如说20个观察者。您需要使用线程池,这样就不会每次都创建新线程,而是重用旧线程
  • 如果许多观察者执行相同的代码,您可以让一个助手对象执行该代码,而让其他观察者观察该助手对象

  • 您可以创建一个线程池并创建单独的工作线程来执行更新操作,而不是在同一线程中调用update方法all observer方法

    示例代码:

     for (int i = arrLocal.length-1; i>=0; i--){
    executor.execute(new Runnable() {
              @Override
    
              public void run() {
                ((Observer)arrLocal[i]).update(this, arg);
              }
            });
    }
    

    您可以创建一个线程池并创建单独的工作线程来执行更新操作,而不是在同一线程中调用update方法all observer方法

    示例代码:

     for (int i = arrLocal.length-1; i>=0; i--){
    executor.execute(new Runnable() {
              @Override
    
              public void run() {
                ((Observer)arrLocal[i]).update(this, arg);
              }
            });
    }
    

    我会小心过早的优化。您是否测量并验证了您确实存在问题?如果您的问题不是观察者数量太多,而是观察者在事件调度程序线程上完成所有工作,而不是使用单独的线程,那么我不会感到惊讶。我会小心过早优化。您是否测量并验证了您确实存在问题?如果您的问题不是观察者数量太多,而是观察者正在事件调度程序线程上执行所有工作,而不是使用单独的线程,那么我不会感到惊讶。