onedrive 做网站静态,企业网银登录,wordpress模板h,长春高铁站#x1f4da;博客主页#xff1a;爱敲代码的小杨.
✨专栏#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》
❤️感谢大家点赞#x1f44d;#x1f3fb;收藏⭐评论✍#x1f3fb;#xff0c;您的三连就是我持续更…
博客主页爱敲代码的小杨.
✨专栏《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》
❤️感谢大家点赞收藏⭐评论✍您的三连就是我持续更新的动力❤️
小杨水平有限欢迎各位大佬指点相互学习进步 文章目录 1. 线程状态的分类2. 线程状态代码演示3. 线程状态转化 1. 线程状态的分类
NEW(新建): Thread对象有了, 但是还没有启动线程RUNNABLE(可运行): 线程在Java虚拟机中执行时处于此状态。这个线程可能正在CPU上执行, 这个线程可能没在CPU上执行, 随时可以调度到 CPU 上执行TERMINATED(终止): 线程已经终止了, 内核中的线程已经销毁了WAITING(等待)当线程在等待另一个线程执行特定动作不带超时时线程处于此状态。TIMED_WAITING(计时等待)与WAITING状态类似但是等待有一个超时时间。BLOCKED(阻塞)当线程试图进入synchronized锁定的代码块或方法时而锁被其他线程持有时线程将进入BLOCKED状态。
2. 线程状态代码演示
使用getState得到线程的状态
NEW(新建):
public class demo22 {public static void main(String[] args) {Thread t1 new Thread(() - {System.out.println(hello t1);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}});System.out.println(t1 线程的状态: t1.getState());}
}
运行结果:
RUNNABLE(可运行):
public class demo22 {public static void main(String[] args) {Thread t1 new Thread(() - {System.out.println(hello t1);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}});t1.start();System.out.println(t1 线程的状态: t1.getState());}
} TERMINATED(终止):
public class demo22 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {System.out.println(hello t1);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}});t1.start();// 等待t1线程执行结束t1.join();System.out.println(t1 线程的状态: t1.getState());}
}
运行结果:
WAITING(等待):
public class demo22 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {while (true) {System.out.println(hello t1);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t1.join();}
}
由于 idea 中打印不好观察 WAITING, 我们使用jconsole工具来观察线程状态 jconsole:在 jdk 安装目录下的 bin 文件夹中 运行结果:
TIMED_WAITING(计时等待)
public class demo22 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() - {while (true) {System.out.println(hello t1);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t1.join(3600 * 100);}
} 3. 线程状态转化 举例: 小杨和小美要去买肯德基, 还没有去, 就是 NEW 状态 当小杨和小美开始去窗口排队,等待服务,就进入 RUNNABLE 状态 ;该状态并不表示已经被肯德稽开始接待排在队伍中也是属于该状态即可被服务的状态是否开始服务则看调度器的调度; 当小杨和小美因为一些事需要去忙, 例如:考虑吃什么?..这时候就进入了BLOCKED,WATING, TIMD_WATING状态 当小杨和小美都买完了肯德基为TREMINATED状态