【发布时间】:2011-04-20 09:25:49
【问题描述】:
我知道当没有其他非守护线程处于活动状态时,所有守护线程都应该被杀死。 我正在开发从静态对象获取数据的小程序。这些静态对象正在守护线程中从远程服务器下载一些数据。多个小程序可以访问相同的数据,因此为每个小程序运行线程是没有意义的。 问题是当我重新加载页面时。小程序正在重新加载,它们在这些静态对象中注册,一切都会好起来的,只是 JVM 会杀死守护线程。
也许我一步一步解释:
- Applet 正在加载,它在提供数据的静态对象中注册。
- 静态对象启动守护线程。
- 页面重新加载。
- Applet 正在卸载(调用了 stop() 和 destroy())
- 正在创建新的小程序实例并在静态对象中注册。
- JVM 在守护线程中抛出 ThreadDeath 并且通信停止。
在我看来,步骤 6 应该在 4 之后和 5 之前。 我错过了什么吗?
我开发的解决方法是在静态对象中注册之前休眠一段时间,让 JVM 杀死守护进程,然后自动创建守护进程,但这只是一种解决方法。有更好的解决方案吗?
【问题讨论】: