已经写了很多关于一般异常的智慧以及特别是在 Java 中使用已检查与未检查异常的文章,但我有兴趣看到对将线程终止作为默认策略而不是应用程序终止的决定的辩护它在 C++ 中的方式。这个选择对我来说似乎非常危险:程序员没有计划的某些情况会导致程序的某些部分在记录堆栈跟踪后死掉,但其余的程序士兵却坚决地坚持下去,会出什么问题?我的直觉和经验表明,这里很多事情都可能出错,默认策略是那种只能由有特定理由选择它的人专门选择的东西,那又如何?这个策略的好处是什么,却有这么大的坏处?我是否高估了风险?
编辑:根据到目前为止的答案,我觉得我需要更加专注于描述我所感知的危险;我说的是使用多线程(例如在线程池中)来更新共享状态的应用程序的情况。我认识到这个策略不会给单线程应用程序带来问题。
EDIT2:您可以从解释为什么不推荐使用 Thread.stop() 方法中看到语言维护人员对这些风险的认识(可在此处找到:http: //docs.oracle.com/javase/7/docs /technotes/guides/concurrency/threadPrimitiveDeprecation.html)。当线程由于未捕获的异常而意外死亡时,同样的问题也适用。他们一定设计了 JVM,以便在线程死亡时自动解锁所有监视器,这似乎是一个糟糕的实现选择;线程在监视器锁定的情况下死亡应该表明整个程序应该死亡,因为替代方案几乎可以肯定是某些共享状态下的内部不一致。