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()
包含指令的类需要一些“输入”通道;例如,在类列表中可能有一个“简单”字段,您的工作项将其异常添加到该字段中
创建这些工作项的“主”类应该定期检查该列表;并在发现异常时停止添加新工作项
当然,您必须确保线程安全,并提供合理的体系结构。感谢您的回复。我已经实现了这样一个“桥”,稍后将对其进行测试。很高兴它最终成功了!