【问题标题】:Terminating ThreadPool-Threads hanging in swt syncExec终止挂在 swt syncExec 中的 ThreadPool-Threads
【发布时间】:2014-12-16 22:39:15
【问题描述】:

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

以下示例显示了由线程池线程执行的可运行对象。你可以在这里找到完整的代码: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 );
            }
         });
      }
      }
  }
}

【问题讨论】:

    标签: java concurrency swt threadpool terminate


    【解决方案1】:

    DoSomething 中的 syncExec() 调用导致死锁。如果将syncExec() 替换为asyncExec(),线程池就可以正常关闭。您使用syncExec() 是否有特定原因?

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

    【讨论】:

    • 谢谢!!!线程池对通过 syncExec() 调用获取的数据执行一些操作,因此线程池必须等待结果。
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多