面试题答案
一键面试1. 终止线程策略
- 优点:
- 性能方面:操作相对简单直接,能快速打破死锁局面,释放系统资源,使得系统可以尽快从死锁状态恢复运行。例如在一些对实时性要求不高,但对资源释放速度有一定要求的批处理系统中,快速终止线程能让系统快速进行下一批任务处理。
- 数据一致性方面:如果线程执行的任务对数据一致性要求不高,例如只是进行一些日志记录等简单操作,终止线程不会对核心业务数据的一致性造成严重影响。
- 缺点:
- 性能方面:被终止线程之前所做的工作可能全部白费,造成资源浪费。比如一个长时间运行的复杂计算任务线程被终止,其计算结果丢失,再次运行该任务需要重新开始计算。
- 数据一致性方面:若线程正在处理关键业务数据,终止线程可能导致数据处于不一致状态。例如在银行转账操作中,一个线程已经完成了从账户A扣款,但还未完成向账户B的入账,此时终止线程,会导致数据不一致。
- 适用场景:适用于线程任务执行时间较短,且对数据一致性要求较低的场景。比如一些监控线程,定期采集系统运行状态数据,若发生死锁,终止该线程不会对系统核心业务数据造成影响,且能快速恢复系统资源。
2. 资源剥夺策略
- 优点:
- 性能方面:可以在不终止线程的情况下打破死锁,避免了线程重复执行带来的性能开销。例如在数据库事务中,通过剥夺某事务占用的锁资源,使得其他事务可以继续执行,而无需回滚整个事务重新开始。
- 数据一致性方面:相较于终止线程策略,对数据一致性影响较小,因为线程不会突然终止,已执行的操作可以在后续继续完成。如在文件系统操作中,某个线程正在对文件进行写入操作,通过资源剥夺让其暂停,待死锁解除后可以继续完成写入,保证文件数据的完整性。
- 缺点:
- 性能方面:资源剥夺过程本身可能需要额外的系统开销,包括资源状态的检查、剥夺操作的执行等。如果资源剥夺操作频繁,会对系统性能产生较大影响。
- 数据一致性方面:在剥夺资源过程中,如果处理不当,仍可能导致数据不一致。例如在分布式系统中,资源剥夺可能会引起网络延迟等问题,导致数据同步不及时,进而出现数据不一致。
- 适用场景:适用于对数据一致性要求较高,且线程执行任务较为复杂、执行时间较长的场景。比如在企业级应用的订单处理系统中,订单的创建、支付等操作涉及多个步骤,对数据一致性要求极高,采用资源剥夺策略可以在不破坏已执行操作的前提下解决死锁问题。