currentThread:获取当前线程的实例 相当于this
但是对于lambda runnable的方式不能用this
lambda指向的是lambda表达式对应的接口的实例
runnable指向的是runnable的实例
Thread的几个常见属性:
线程执行前:
线程执行后:
中断线程:
让一个线程结束.
情况一:任务执行完毕 结束(run执行完)
情况二:任务执行一半 结束(调用interrupt)
第一种:
第二种:
以下两个动作是同时执行的 至于哪个让线程停下来的我们就不得而知了
1.(在sleep或者wait中阻塞)这个操作本质上是给当前线程触发一个异常 针对异常的处理是catch内部的事情
2.(不在sleep或者wait中阻塞)会将 Thread.currentThread().isInterrupted()置为true
说说这个sleep:
关于线程休眠的本质:
interrupt的两种方式的区别:
第一种:当中断之后 上面的标记位会被修改
第二种:仅仅判断标记位 不会修改
线程等待:
[抢占式执行]主线程和新线程之间是并发执行的 谁先执行谁后执行说不准
虽然我们无法控制谁先执行 谁后执行 但是我们可以控制谁先结束[线程阻塞]
join方法: 控制哪个线程先结束 执行join方法的线程就会阻塞
第一种:线程之间时并行执行的.
第二种:线程之间时串行执行的 第一种走完第二种走
但是主线程是最后阻塞的
线程的状态:JAVA中线程的状态是通过enum表示的
isAlive(是否存活):除了New和Terminated其他状态都表示线程存活(PCB是否存活)
几种状态的关系图如下: