多线程-基础

并行:两个或者多个事件在同一时刻发生

并发:两个或者多个事件在同一时间间隔内发生

 

java线程6种状态:

操作系统中只有new terminated read  running  waiting五中状态

 

 

线程的启动过程:

所以直接调用run()方法只是执行方法,并不会启动线程

 

 

 

线程的终止:

1:通过自定义标志位进行中断 flag

2:调用t.interrupted

3:通过异常复位

为何需要复位?

Thread。Interrupted()是属于当前线程的,是当前线程对外界中断信号的一个响应,表示自己已经得到了中断信号,但是不会立刻中断自己,具体什么时候中断由自己决定,让外界知道在自身中断前他的中断状态仍旧是false

thread.interrupted()方法实际上就是设置一个Interrupted状态标识位为true,并且通过ParkEvent.unpark()方法来唤醒线程

1:对于synchronized阻塞的线程,被唤醒后会继续尝试获取锁,如果失败仍旧可能被park

2:在调用ParkEvent的park()方法之前,会先判断线程的中断状态,如果为true则会清除当前的中断标识

3:Object.wait()  Thread.sleep()  Thread.join()会抛出InterruptedException

阻塞方法的释放会取决于一些外部事件,但是阻塞方法可能因为等不到外部的触发事件而导致无法终止,所以它允许一个线程请求自己来停止它正在做的事情,当一个方法抛出InterruptedException时候,只是告诉调用者如果执行该方法的线程被中断,它会尝试停止正在做的事情并且通过抛出InterruptedException表示提前返回,所以这个异常表示一个阻塞的线程别其他线程中断了,然后由于线程调用了interrupted()中断方法,那么被阻塞的线程被唤醒后会通过is_interrupted()方法来判断中断标识的状态变化,如果发现中断标识为true,则先清除中断标识,然后抛出异常

注意:抛出异常并不是线程必须终止,而是提醒当前线程有中断操作发生,至于如何处理看调用者

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值