【发布时间】:2013-03-22 10:11:27
【问题描述】:
在我的应用程序中,我有一个固定大小的ExecutorService 1。
现在线程调用一些本机代码。在本机方法内部,它被阻塞并等待需要调度的操作系统事件。问题在于ExecutorService 的正常关闭。
如果我中断线程,那么线程仍然不出来(显然)。如果我将线程设置为daemon。它仍然不会让 JVM 关闭。我唯一的工作代码是使用System.exit,显然我不打算使用它。还有其他出路吗?
【问题讨论】:
-
你认为 try catch 和 end normal 会起作用吗?
-
@Madhu 如果异常卡在本机代码中,您将无法抛出异常(即尝试/捕获任何内容)——这就是问题所在。
-
什么本地调用被阻塞了?你能人为地满足等待吗?
-
'我唯一的工作代码是使用 System.exit' 不使用 System.exit 的最重要原因是什么?
-
@MartinJames 它调用了名为
ReceiveNextEvent的Mac Carbon 框架函数,它不断调度操作系统事件。 System.exit 的问题是——首先我需要释放一些本机资源,而且只有在我移出本机代码时才会发生这种情况。
标签: java multithreading native macos-carbon