大家好,这里是淇妙小屋,一个分享技术,分享生活的博主
后续会发布更多MySQL,Redis,并发,JVM,分布式等面试热点知识,以及Java学习路线,面试重点,职业规划,面经等相关博客
转载请标明出处!
线程被构建,还未start
运行状态
阻塞状态,阻塞于锁
等待状态
超时等待状态,超过时间自行返回
终止状态,表示线程执行完毕
JVM中不存在非守护线程时,JVM会退出
创建线程的时候可以给线程设置优先级,优先级高的线程有更高的概率分配到更多的时间片(不绝对)
可以理解为Thread有个interrupted标识符,默认为false,表示一个线程是否被其他线程进行了中断操作
public void interrupt();//将Thread的表示符设为false
public void isInterrupted();//返回标识符
public static isInterrupted();//返回标识符,并设为false
如果线程抛出InterruptedException,那么在抛出InterruptedException之前,JVM会先将标识符设为false,然后再抛出
当前线程进入TIME_WAITING状态,不会释放锁,但会释放CPU资源
一段时间后苏醒,回到RUNNABLE状态
当前线程由RUNNING状态变为READY状态,不会释放锁,但会释放CPU资源
等待队列中的线程要想从wait()中返回,除了需要有其他线程调用notify()外,还需要等待线程释放锁,获得对象的锁后才能从wait()返回
注意,wait()是Object的,join()是Thread的
join()中底层调用的wait()
若调用了thread2.join()
就是让当前线程进入thread2的monitor对象的等待队列中,知道thread2结束才会被唤醒
由于底层调用的是wait(),所以会释放锁,但注意释放的是thread2的锁
synchronized(对象){
while(条件不满足){
对象.wait();
}
对应的处理逻辑
}
synchronized(对象){
改变条件
对象.nitify();
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。