Java 如何在异常情况下完成WorkEvent时通知主线程?

Java 如何在异常情况下完成WorkEvent时通知主线程?,java,jakarta-ee,websphere-8,workmanagers,commonj,Java,Jakarta Ee,Websphere 8,Workmanagers,Commonj,我正在和做一些与主线程异步的工作 为此,我使用以下代码: // wm = via resource injected WorkManager WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener() { @Override public void workStarted(WorkEvent arg0) { } @Override public void workReject

我正在和做一些与主线程异步的工作

为此,我使用以下代码:

// wm = via resource injected WorkManager

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener() {

  @Override
  public void workStarted(WorkEvent arg0) {
  }

  @Override
  public void workRejected(WorkEvent arg0) {
  }

  @Override
  public void workCompleted(WorkEvent arg0) {
    WorkException exception = arg0.getException();
    if (null != exception) {
      throw new RuntimeException("WorkCompleted with Exception");
    }
  }

  @Override
  public void workAccepted(WorkEvent arg0) {
  }
});
只要
WorkEvent
无一例外地完成,这就可以很好地工作。但是当它在异常情况下完成时,我想通知主线程停止向
工作管理器提交更多工作项

我想我可以引发一个
RunetimeException
来通知主线程,但是通过分析日志,我发现异常是在主线程完成将所有
工作项提交给
WorkManager
并调用
WorkManager
join
-方法的那一刻抛出的,这太晚了(在大多数情况下,50000项必须由
WorkManager
完成)

那么,当在
workCompleted
中发现异常时,我如何中断我的主线程以停止它向
WorkManager
提交更多项目呢?

那么你需要一个“更直接”的界面

意义;您正在显示调用以下命令的代码:

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener()
包含指令的类需要一些“输入”通道;例如,在类
列表中可能有一个“简单”字段,您的工作项将其异常添加到该字段中

创建这些工作项的“主”类应该定期检查该列表;并在发现异常时停止添加新工作项


当然,您必须确保线程安全,并提供合理的体系结构。

感谢您的回复。我已经实现了这样一个“桥”,稍后将对其进行测试。很高兴它最终成功了!