多线程学习-day-02理解中断

10 篇文章 0 订阅
6 篇文章 0 订阅

线程基础、线程之间的共享和协作

(目前会将一些概念简单描述,一些重点的点会详细描述)

上一章回顾:

基础概念:

1,CPU核心数,线程数

2,CPU时间片轮转机制

3,什么是进程和线程

4,什么是并行和并发

5,高并发的意义、好处和注意事项

线程基础:

1,启动和终止线程

        ①、三种启动线程方式

 

本章学习目标:

理解中断

如何安全的终止线程

 

1,理解中断

        线程自然终止:自然执行完 或 抛出未处理异常

        stop()、resume()、suspend() 三个方法已经在后续的jdk版本已过时,不建议使用

        stop()方法:会导致线程不正确释放资源;

        suspend()方法:挂起,容易导致死锁

        Java线程是协作式工作,而非抢占式工作;

        介绍三种中断方式:

        ①、interrupt()方法

                interrupt()方法中断一个线程,并不是强制关闭该线程,只是跟该线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定;

        ②、inInterrupted()方法

                inInterrupted()方法判断当前线程是否处于中断状态;

        ③、static 方法interrupted()方法

                static方法interrupted()方法判断当前线程是否处于中断状态,并将中断标志位改为false;

        注:方法里如果抛出InterruptedException,线程的中断标志位会被置为false,如果确实需要中断线程,则需要在catch里面再次调用interrupt()方法

public class HasInterruptException {

	// 定义一个私有的Thread集成类
	private static class UseThread extends Thread {

		@Override
		public void run() {
			// 获取当前线程名字
			String threadName = Thread.currentThread().getName();
			// 判断线程是否处于中断标志位
			while (!isInterrupted()) {
				// 测试用interrupt中断后,报InterruptedException时状态变化
				try {
					System.out.println(threadName + "is run !!!!");
					// 设置休眠毫秒数
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					// 判断中断后抛出InterruptedException后中断标志位的状态
					System.out.println(threadName + " interrupt flag is " + isInterrupted());
					// 如果抛出InterruptedException后中断标志位置为了false,则需要手动再调用interrupt()方法,如果不调用,则中断标志位为false,则会一直在死循环中而不会退出
					interrupt();
					e.printStackTrace();
				}
				// 打印出线程名称
				System.out.println(threadName);
			}
			// 查看当前线程中断标志位的状态
			System.out.println(threadName + " interrupt flag is " + isInterrupted());
		}
	}

	public static void main(String[] args) throws InterruptedException {
		UseThread useThread = new UseThread();
		useThread.setName("HasInterruptException--");
		useThread.start();
		Thread.sleep(800);
		useThread.interrupt();
	}
}

控制台输出结果:
HasInterruptException--is run !!!!
HasInterruptException-- interrupt flag is false
java.lang.InterruptedException: sleep interrupted
HasInterruptException--
HasInterruptException-- interrupt flag is true
	at java.lang.Thread.sleep(Native Method)
	at com.xiangxue.ch1.safeend.HasInterruptException$UseThread.run(HasInterruptException.java:18)

来自享学IT教育课后总结。

 

 

更多精彩敬请关注公众号

Java极客思维

微信扫一扫,关注公众号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值