终止在swt syncExec中挂起的ThreadPool-Threads

时间:2014-12-16 13:07:20

标签: java concurrency swt threadpool terminate

当处置显示时,线程池线程总是在swt syncExec调用中挂起。如何避免这种情况并干净地关闭线程?在shell disposeListener中调用shutdownNow不起作用。

以下示例显示了线程池线程执行的runnable。您可以在此处找到完整的代码:http://www.java-forum.org/awt-swing-javafx-and-swt/164617-threadpool-sicher-beenden-verwendung-swt-widgets-display-syncexec.html

private class DoSomething implements Runnable {
    public void run() {
      try { Thread.sleep( 500 ); } catch( InterruptedException e ) {e.printStackTrace();}
      if( !shell.isDisposed() ) {
        display.syncExec( new Runnable() {
            public void run() {
              drawshit( display );
            }
         });
      }
      }
  }
}

1 个答案:

答案 0 :(得分:0)

syncExec()中的DoSomething次呼叫导致死锁。如果用syncExec()替换asyncExec(),则线程池关闭就好了。是否有使用syncExec()的具体原因?

或者,您应该能够从单独的线程运行关闭代码以避免此问题。