Skip to content

Latest commit

 

History

History
29 lines (14 loc) · 1.53 KB

两阶段终止模式.md

File metadata and controls

29 lines (14 loc) · 1.53 KB

两阶段终止模式是一种相对优雅地结束线程执行的设计模式。这种模式的应用特征是:结束程序的其中一个线程但是不妨碍其他线程运行。

通常来说,停止线程的方法包括Thread的stop方法和System的exit方法。前者再旧版本jdk中仍然可用但该方法的结束方式不会让线程有机会释放锁,可能导致死锁的出现,后者会导致整个程序停止运行。

这种设计模式的应用场景:系统的健康状态监控,记录cpu使用率、内存使用率,定时监控。后台的监控线程不断地记录,每隔2s记录一次。如果我想临时停止记录,需要个机制能够停止监控线程。这类程序的典型流程图是如下图这种。

从Java语言的角度看,线程状态包括如下六种。

【初始状态】:在编程语言中创建了线程对象,未与操作系统线程关联

【可运行状态】:涵盖了操作系统线程的【可运行状态】、【运行状态】和【阻塞状态】。操作系统层面的阻塞状态是调用了阻塞API,线程实际不会用到CPU但涉及到总线操作。由于BIO导致的线程阻塞,在Java里无法区分,仍然认为是可运行。

Java的阻塞状态包含BLOCKED,WAITING,TIMED_WAITING三种状态。

【BLOCKED】:

【WAITING】:join方法进入

【TIMED_WAITING】:sleep方法进入

【终止状态】:线程已经执行完毕,不会再转换为其他状态

线程状态转换

活跃性

Lock对活跃性加以改进