Java线程状态转换过程_Java线程状态变换过程代码解析

线程状态

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()+"线程停止执行");

}

}

执行结果:

0a189b17df13ca5d9c3f111b79de11c0.png

线程强制执行到结束

使用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);

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值