线程的五大状态和方法(加代码解析)
线程停止stop
package com.xxgc.state;
//测试stop
//1.建议线程正常停止--->利用次数,不建议死循环
//2.建议使用标志位--->设置一个标志位
//3.不要使用stop或者destroy等过时或者JDK不建议使用的方法
public class TestStop implements Runnable {
//1.设置一个标志位
private boolean flag = true;
线程休眠sleep 延时和倒计时
sleep() 方法定义在Thread.java中,是 static 修饰的静态方法。 sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。
package com.xxgc.state;
import com.xxgc.demo01.TestThread4;
//模拟网络延时 :放大问题的发生性
public class TestSleep implements Runnable {
//票数
private int ticketNums = 10;
package com.xxgc.state;
import java.text.SimpleDateFormat;
import java.util.Date;
//模拟倒计时...
public class TestSleep2 {
public static void main(String[] args) {
try {
tenDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
//打印当前系统时间
Date startTime = new Date(System.currentTimeMillis()); //获取当前系统时间
while(true){
try {
Thread.sleep(1000);
System.out.println(new SimpleDateFormat("HH:mm:ss").format(startTime));
startTime = new Date(System.currentTimeMillis()); //更新当前时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//加static直接调用 模拟倒计时
public static void tenDown() throws InterruptedException {
int num = 10;
while (true){
Thread.sleep(100);
System.out.println(num--);
if(num<=0){
break;
}
}
}
}
线程礼让yield
礼让不一定成功,看CPU心情
礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态
package com.xxgc.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{
线程强制执行join 理解为插队
package com.xxgc.state;
//测试join方法,想象为插队
public class TestJoin implements Runnable {
观测线程状态
package com.xxgc.state;
//观察测试线程的状态
public class TestState {
public static void main(String[] args) throws InterruptedException {
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); //RUNNABLE
//观察启动后
thread.start(); //启动线程
state = thread.getState();
System.out.println(state); //Run
while (state!= Thread.State.TERMINATED){ //只要线程不终止,就一直输出状态
Thread.sleep(100);
state = thread.getState(); //更新线程状态
System.out.println(state); //输出状态TERMINATED
}
thread.start(); //线程停止后就不能再启动,已死亡
/*
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at com.xxgc.state.TestState.main(TestState.java:31)
*/
}
}
每一篇博文都是学习所用,大部分都是网上摘录的,在此谢谢那些大佬的博文帮助,非常感谢!!!

浙公网安备 33010602011771号