简单理解,求指正

来源:5-7 恢复中断

白篱

2021-08-28

线程的创建,采用继承Thread类,或者实现Runnable接口,重写里面的run方法。
线程的启动,采用start方法,调用run方法只是简单的方法调用,而start方法会在JVM里面调用本地方法去创建以及启动线程。
线程的停止

  • 使用Thread.currentThread().isInterrupted()判断
  • 使用Thread.sleep()方法(sleep会检测标志位的机制)

一个线程的开启,无非就是执行run方法,而run方法就是调用别的方法,或者向下继续执行run方法。
A线程 修改 B线程的标志位,B线程要停止,要么在run方法可以停止执行的地方里面利用Thread.currentThread().isInterrupted()方法去判断 B线程 是否需要停止。
而这个可以停止执行的地方

  • 可以在run方法调用的别的方法里面
  • 也可以直接在run方法当中
if(Thread.currentThread().isInterrupted()){
	// 直接抛出异常, 中断线程
}

而使用Thread.sleep()方法的话,会在调用该方法的时候去判断标志位,如果为true则抛出异常并且修改标志位为false
所以上述的两种情况中

//传递中断 --> 可以直接抛出异常给最高的方法去处理(即抛到run方法中)
//恢复中断 --> 也可以不理会,但是必须恢复中断标志(即在catch语句里面修改标志位)

不管使用哪种方法,最好判断好设置中断标志位后能否正常去利用中断标志位来中断线程

  • 线程暂停时间,例如A线程还没设置中断标志位,B线程就已经运行到了可以中断的位置
  • Thread.sleep()抛出异常,捕捉后未处理
写回答

1回答

悟空

2021-08-29

给你点赞

0
0

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程