一个Java应用程序中,主线程创建并启动了一个新的线程,该新线程的任务是周期性地检查系统资源使用情况并将结果写入日志文件。如果需要确保该日志记录线程在所有非守护线程结束后自动终止,以下哪种方式最为恰当?
答案解析
A选项错误,用户线程的结束必须由程序显式控制,即使主线程结束,用户线程依然会继续运行,直到自身结束或者被强制终止; join() 方法的作用是让主线程等待子线程执行完毕,与题目要求不符。B选项正确,守护线程的特点是在所有非守护线程(包括主线程)结束后自动终止,无需显式调用 join() 或其他终止方法。C选项错误,用户线程即使被 interrupt() 也可能不会立即终止,需要在线程内部捕获 InterruptedException 并进行相应处理;且interrupt()并非优雅的线程终止方式。D选项错误,stop() 方法已被废弃,因为它会导致数据不一致和不可预测的问题; 守护线程已经会在所有非守护线程结束后自动终止,stop() 方法没有必要。
正确答案:B