日期:2014-05-20  浏览次数:20588 次

退出java程序时的线程同步问题
我做的一个多线程的程序要求在用户点击关闭按钮退出程序时弹出一个类似SlpashWindow类型的窗口,提示用户正在停止其他线程的运行,请稍后等信息。
   
  问题是我要在主线程的退出系统函数中不断的检测各线程的状态,直到所有线程都终止后才退出程序,如果使用wait和notify则主线程会在检测其他线程的状态的过程中被挂起,这时主界面包括弹出的SlpashWindow类型的窗口都处于无响应的状态,SlpashWindow中的gif图片和文字根本无法显示,请问如何才能实现这个功能

------解决方案--------------------
所有的线程(Thread/Runnable)都提交到ExecutorService来执行,通过返回的Future判断线程是否完成。
------解决方案--------------------
首先,不是只有主线程结束,进程就会结束。只要有线程在运行,进程就不会结束。
其次,检测其他线程的运行状况,可以由主线程来完成,也可以创建一个线程来完成。
第三,检测线程的范围,可以抛开几个线程不去检测。比如,界面绘制线程,检测线程本身,等等。
最后,我们判断程序是否要结束,一般不去检测线程的运行状况,
而是检测相关事情是否完成或者资源是否释放完毕。
------解决方案--------------------
线程只有在完成任务后才会自己被销毁