七、观测线程状态
//观察测试线程的状态
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);// NEW
// 观察启动后
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);// 输出状态
}
}
}
注:线程死亡后不可再次start。
八、线程优先级
1.Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器安装优先级决定应该调度哪个线程来执行。
2.线程的优先级用数字表示,范围从1~10
(1)Thread.MIN_PRIORITY=1;
(2)Thread.MAX_PRIORITY=10;
(3)Thread.NORM_PRIORITY=5;
3.使用getPriority()和setPriority(int xxx)方法可以获取或改变线程优先级
4.优先级低只是意味着会获得调度的概率低,并不是优先级低就不会被调用了,这都是看CPU的调度
//测试线程优先级
public class TestPriority {
public static void main(String[] args) {
//主线程默认优先级
System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
MyPriority myPriority=new MyPriority();
Thread t1=new Thread(myPriority);
Thread t2=new Thread(myPriority);
Thread t3=new Thread(myPriority);
Thread t4=new Thread(myPriority);
Thread t5=new Thread(myPriority);
Thread t6=new Thread(myPriority);
//先设置优先级,再启动
t1.start();
t2.setPriority(1);
t2.start();
t3.setPriority(4);
t3.start();
t4.setPriority(Thread.MAX_PRIORITY);
t4.start();
t5.setPriority(3);
t5.start();
t6.setPriority(9);
t6.start();
}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
}
}