package _03;
import java.text.SimpleDateFormat;
import java.util.Date;
public class _3_29ThreadStatus {
public static void main(String[] args) throws InterruptedException {
//新生-就绪-运行-阻塞-死亡
//new 则表示线程新生
//start 方法则表示线程进入就绪状态
//阻塞: sleep()方法表示抱着资源不给别人用, 而wait是等资源阻塞的过程 join 插队
//使线程停下来 不推荐使用stop方法 官方文档推荐加boolean状态变量进行控制
// TerminateThread tt = new TerminateThread();
// new Thread(tt).start();
// for(int i=0;i<99;i++){
// System.out.println(Thread.currentThread().getName()+i);
// }
// tt.Terminate();
//sleep方法 抱着资源睡觉 每个资源有个锁 sleep不会释放锁
//sleep 通常模拟网络延迟 倒计时
// int num =10;
// while(num>=0){
// Thread.sleep(1000);
// System.out.println(num--);
// }
//倒计时
// Date endtime = new Date(System.currentTimeMillis()+1000*10);
// long end = endtime.getTime();
// Date starttime = new Date(System.currentTimeMillis());
// long start = starttime.getTime();
// while(start <= end){
// System.out.println(new SimpleDateFormat("mm:ss").format(starttime));
// Thread.sleep(1000);
// start = start + 1000;
// starttime = new Date(start);
// }
//yield 礼让线程 让当前运行线程跳回就绪状态 不是阻塞状态
// new Thread(new MyYield()).start();
//join 合并(插队)线程 当前线程先执行,其余线程阻塞
// MyJoin mj =new MyJoin();
// Thread t = new Thread(mj);
// t.start();
// for(int i=0;i<100;i++){
// if(i==50){
// t.join();
// }
// System.out.println(Thread.currentThread().getName()+i);
// }
//线程的四种状态
//1.NEW 、 RUNNABLE(就绪和运行) 、 BLOCKED、 WAITING、 TIMED_WAITING、 TERMINATED
Thread t = new Thread(()->{
for(int i=0;i<5;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//观察状态
Thread.State state = t.getState();
System.out.println(state);
t.start();
state = t.getState();
System.out.println(state);
while(true){
int num = Thread.activeCount(); //统计当前线程的数量
System.out.println(num); //IDEA会帮你再创建一个线程 3个
state = t.getState();
System.out.println(state); //TIMED_WAITING
}
}
}
//终止线程的方式
//1.线程正常终止 2.使用状态变量 不推荐stop、destory()方法
class TerminateThread implements Runnable{
//状态标识符
private boolean flag = true;
@Override
public void run() {
int i=0;
while(flag){
System.out.println(i++);
}
}
//对外提供改变状态的方法
public void Terminate(){
flag = false;
}
}
class MyYield implements Runnable{
@Override
public void run() {
System.out.println(System.currentTimeMillis());
Thread.yield(); //重回就绪状态 大家公平竞争
System.out.println(System.currentTimeMillis());
}
}
class MyJoin implements Runnable{
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+i);
}
}
}
线程状态切换
于 2022-03-29 13:15:34 首次发布