有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    我在发布服务器和订阅服务器上使用java.lang.ThreadLocal变量解决了这个问题

    Publisher需要封装在一个类中,该类读取线程本地异常并将其抛出

    public void publish(Event event) {
      eventBus.post(event);
      if(threadLocalException != null) {
        Store threadLocalException in some variable say e
        Clear threadLocalException variable
        throw e;
      }
    }
    

    订阅服务器需要包装在一个类中,才能在线程局部变量中设置异常

    public abstract class EventSubscriber<T extends Event> {
    
      @Subscribe
      public void invoke(T event) {
        try {
          handle(event);
        } catch (Exception e) {
          Set thread local variable to e
        }
      }
    
      protected abstract void handle(T event);
    
    }