Java线程状态变换过程代码解析
作者:Kuris101 时间:2023-08-06 18:05:29
线程状态
NEW:刚创建未启动的线程
RUNNABLE:正在执行状态
BLOCKED:处于阻塞状态的线程
WAITING:正在等待另一个线程执行特定动作的线程
TIMED_WAITING:等待另一个线程执行时间到达指定时间
TERMINATED:线程退出执行
public class TestState {
public static void main(String[] args) {
Thread thread = new Thread(()->{
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("/////");
});
//观察线程状态
Thread.State state = thread.getState();
System.out.println(state); //New状态
thread.start();
state = thread.getState();
System.out.println(state);//Run状态
while (state!=Thread.State.TERMINATED){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
state = thread.getState();//更新线程状态
System.out.println(state);//输出状态
}
}
}
线程礼让
当前正在执行的线程暂停,但是不会阻塞
当前线程失去处理机,编程就绪状态
礼让是否成功取决于CPU,如果礼让成功,则等待下一次调度
public class TestYield {
public static void main(String[] args) {
MyYield myYield = new MyYield();
new Thread(myYield,"a").start();
new Thread(myYield,"b").start();
}
}
class MyYield implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程开始执行");
Thread.yield();
System.out.println(Thread.currentThread().getName()+"线程停止执行");
}
}
执行结果:
线程强制执行到结束
使用join()方法
使用join()方法的线程会强制执行直到结束,不会让出处理机
public class TestJoin implements Runnable{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("强制执行线程来了"+i);
}
}
public static void main(String[] args) throws Exception{
TestJoin testJoin = new TestJoin();
Thread thread = new Thread(testJoin);
thread.start();
for (int i = 0; i < 500; i++) {
if(i==200){
thread.join();
}
System.out.println("主线程"+i);
}
}
}
来源:https://www.cnblogs.com/Kuris101/p/13020803.html
标签:Java,线程,状态
0
投稿
猜你喜欢
Android基于ImageView绘制的开关按钮效果示例
2023-02-22 19:39:11
Unity中的PostProcessScene实用案例深入解析
2021-06-09 04:57:28
java Mail邮件接收工具类
2022-04-24 14:17:17
ELK搭建线上日志收集系统
2021-11-01 17:34:41
Android中判断网络连接是否可用及监控网络状态
2022-09-07 05:24:25
Springcloud Eureka配置及集群代码实例
2021-09-19 05:54:52
springboot+nginx+https+linux实现负载均衡加域名访问简单测试
2022-04-26 22:35:13
适配android7.0获取文件的Uri的方法
2022-03-13 17:32:06
基于ArrayList源码解析(基于JDK1.8)
2021-10-07 18:34:25
C#导出生成excel文件的方法小结(xml,html方式)
2023-10-03 16:32:26
Java多线程和并发基础面试题(问答形式)
2022-03-29 17:39:42
SpringCloud OpenFeign 服务调用传递 token的场景分析
2022-12-26 22:24:07
C# TaskScheduler任务调度器的实现
2022-09-30 16:54:21
java异步编程之一文看完其异步函数表
2021-12-25 10:57:39
android效果TapBarMenu绘制底部导航栏的使用方式示例
2023-07-29 20:53:36
详解WPF中的对象资源
2023-10-28 14:09:41
C#实现农历日历的方法
2022-08-17 21:27:29
详解Java中Math.round()的取整规则
2022-10-20 14:22:01
Android中TelephonyManager类的用法案例详解
2022-04-30 20:18:32
Android手机开发设计之记事本功能
2023-12-10 21:47:00