线程状态
Thread.State
是一个枚举类,表示线程的状态,线程可以处于以下
-
NEW
创建之后,尚未启动的线程处于这个状态 -
RUNNABLE
在java虚拟机中执行的线程处于此状态。 -
BLOCKED
被阻塞等待监视器锁定的线程处于此状态。 -
WAITING
正在等待另一个线程执行特东动作的线程处于此状态。 -
TIMED_WAITING
正在等待另一个线程执行动作到达指定等待时间的线程处于此状态。 -
TERMINATED
已退出的线程的状态
public class Test {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程即将结束");
});
//观察状态,未启动
Thread.State state = thread.getState();
System.out.println("未启动状态" + state);
//启动
thread.start();
System.out.println("启动线程之后" + thread.getState());
while (!Thread.State.TERMINATED.equals(thread.getState())) {
Thread.sleep(1000);
System.out.println(thread.getState());
}
}
}
线程优先级
java提供了一个线程调度器来监控程序中启动后进入就绪状态的所有线程,调度器会按照优先级调度哪个线程来执行。
线程优先级用数字表示,范围为0-10;
- 最小优先级:MIN_PRIORITY = 1;
- 默认优先级:NORM_PRIORITY = 5;
- 最大优先级:MAX_PRIORITY = 10;
注意,在使用过程中,要先设置优先级,再启动线程。
public class TestPriority {
public static void main(String[] args) {
MyPriority priority = new MyPriority();
Thread t0 = new Thread(priority);
Thread t1 = new Thread(priority);
Thread t2 = new Thread(priority);
Thread t3 = new Thread(priority);
Thread t4 = new Thread(priority);
//没有设置优先级
t0.start();
t1.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.setPriority(3);
t2.start();
t3.setPriority(Thread.MAX_PRIORITY);
t3.start();
t4.setPriority(8);
t4.start();
}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"优先级"+Thread.currentThread().getPriority());
}
}
优先级低意味着获得调度的概率低,并不是优先级低就不会被调用了,主要是概率问题。