一、线程的状态
1.1 NEW
NEW
: 安排了工作, 还未开始行动;
把Thread
对象创建好了,但是还没有调用start
。
public class Test01 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
while (true){
}
});
System.out.println(t.getState());//获取线程t的状态 1.
t.start();
}
}
执行结果:
1.2 RUNNABLE
RUNNABLE
: 可工作的. 又可以分成正在工作中和即将开始工作.;
public class Test01 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
while (true){
// 3.runnable
//这里啥也不能有
}
});
t.start();
Thread.sleep(1000);// 2.
System.out.println(t.getState());//获取线程t的状态
}
}
执行结果:
就绪状态,处于这个状态的线程,就是在就绪队列中.随时可以被调度到CPU上,
如果代码中没有进行sleep
,也没有进行其他的可能导致阻塞的操作,代码大概率是处在Runnable
状态的 。
1.3 BLOCKED
BLOCKED
: 这几个都表示排队等着其他事情;
当前线程在等待锁,导致了阻塞(阻塞状态之一)synchronized
1.4 WAITING
WAITING
: 这几个都表示排队等着其他事情;
当前线程在等待唤醒,导致了阻塞(阻塞状态之一)wait
1.5 TIMED_WAITING
TIMED_WAITING
: 这几个都表示排队等着其他事情;
代码中调用了sleep
,就会进入到TIMED_WAITING
,join(超时时间)
意思就是当前的线程在一定时间之内是阻塞的状态。
public class Test01 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
while (true){
try {
//代码中调用了`sleep`
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();