【发布时间】:2011-03-08 10:37:20
【问题描述】:
我有一个 java 客户端,它在新线程中管理其服务器调用以防止 GUI 冻结。
即使在许多地方都阻止了这种情况,也可能会在同一模型上再次调用该方法,例如使用不同的参数。在这种情况下,我显然希望具有最新参数的最新调用成为“成功”并显示其结果的调用。
我有一个系统跟踪先前启动的线程,并在启动新线程之前中断它(Thread.interrupt())。然后其他方法在将新结果发送到 GUI 元素之前检查它们是否在非中断线程中运行(使用 if (Thread.currentThread().isInterrupted())。
这个结构与以前的服务器连接器一起工作,因为我是唯一一个检查进程中断标志的人。我的问题是我现在在客户端中使用 EJB 方法调用,它们对中断的线程反应很糟糕。在 EJB 调用期间中断线程将触发 RuntimeException,其中包括 InterruptedException。而且这似乎不是一件正常的事情。
显然我可以在每个服务器调用中捕获 RuntimeExceptions 并检查它们的中断原因,但它似乎不是很“干净”。
我的问题是:在这种情况下我能做什么?中断运行 EJB 方法调用的线程的正确方法是什么?
【问题讨论】:
-
完成对 EJB 的新过时调用是否重要?还是您真的需要停止 EJB 端的处理?
-
@Rich - 这并不重要。停止它会更好,但很可能需要在服务器端有一个更大的结构,包括消息传递。对于这个问题,我只关注客户端。
标签: java multithreading ejb interrupted-exception