线程的优先级
- Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行,最后谁先被调用,还是得看CPU的心情。
- 默认优先级为5.
- 通过Thread.setPriority来设定线程的优先级
- 在线程开始方法被调用之前,线程的优先级应该被设定
- 可以使用常量,如MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY来设定优先级。
- 线程优先级是一个整数,取值范围为0-10.
来个简单的例子
package com.Thread.demo1;
//线程优先级 设置优先级只是让该线程先执行的概率增大,并不一定先执行,还是得看CPU的心情
public class Threadtest4 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
}
public static void main(String[] args) {
//主线程默认优先级 5
System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
Threadtest4 threadtest4 = new Threadtest4();
Thread t1 = new Thread(threadtest4);
Thread t2 = new Thread(threadtest4);
Thread t3 = new Thread(threadtest4);
Thread t4 = new Thread(threadtest4);
Thread t5 = new Thread(threadtest4);
Thread t6 = new Thread(threadtest4);
Thread t7 = new Thread(threadtest4);
t1.start();
//先设置优先级,再启动
t2.setPriority(2);
t2.start();
t3.setPriority(3);
t3.start();
t4.setPriority(8);
t4.start();
t5.setPriority(6);
t5.start();
}
}
输出结果:
线程的状态:六个状态
举个简单的例子:
package com.Thread.demo1;
import org.omg.PortableServer.THREAD_POLICY_ID;
public class ThreadTest{
public static void main(String[] args) {
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();//new
System.out.println(state);
//观察启动后
thread.start();//启动线程
state = thread.getState();//更新线程状态
System.out.println(state);//run
while(state != Thread.State.TERMINATED){
try {
Thread.sleep(1000);
state = thread.getState();//更新线程状态
System.out.println(state);//输出状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
输出结果: