并行:两个或者多个事件在同一时刻发生
并发:两个或者多个事件在同一时间间隔内发生
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,则先清除中断标识,然后抛出异常
注意:抛出异常并不是线程必须终止,而是提醒当前线程有中断操作发生,至于如何处理看调用者