当主线程崩溃而其它线程继续运行时发生什么(2)
百度广告
清单 2. 把错误通知给客户机线程的示例
public class Server2 extends Thread {
int counter;
public Server2(Client2 _client) {
this.counter = 0;
public void run() {
while (counter < 10) {
counter++;
throw new RuntimeException("counter >= 10");
catch (Exception e) {
throw new RuntimeException(e.toString());
}
public static void main(String args) {
Server2 s = new Server2(c);
s.start();
}
class Client2 extends Thread {
boolean interruptFlag;
public Client2() {
this.interruptFlag = false;
public void run() {
if (! (queue.size() == 0)) {
}
// Processes whatever elements remain on the queue before exiting.
processNextElement();
System.out.flush();
private void processNextElement() {
queue.removeElementAt(0);
}
处理被抛出的异常的其它选项可能是调用 System.exit。这个选项在程序的主线程发生崩溃而其它线程不管理任何临界资源的时候是有意义的。然而在其它情况下,这可能是危险的。例如,考虑这样一个示例,其它线程中的一个正在管理一个打开的文件。如果这是实际的情况,那么只是退出程序会导致资源泄漏。
即使在上面的简单示例中,在 server 线程中调用 System.exit 也会导致 client 未处理其队列上的任何剩余元素就退出。
事实上,就是这样的问题促使 Sun 不建议线程的 stop 方法。由于强行停止一个线程会使资源陷入非一致状态,所以 stop 方法破坏了语言的安全性模型。
想了解 Sun 的更多不建议理由,请参阅参考资料。
总结
模式:孤线程
编辑推荐:
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>