写过几篇关于多线程的文章了,来观测一下线程的状态,看看它们是什么样的
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);
thread.start();
state = thread.getState();
System.out.println(state);
while (state != Thread.State.TERMINATED){
Thread.sleep(100);
state = thread.getState();
System.out.println(state);
}
}
}
在结果当中可以看到线程的状态会有变化
好啦,就是写着看看,具体的线程讲解,在操作系统里讲的详细一些
接下来了探讨一下,不同线程的优先级是怎么样的,之前我们说过,线程是否被调用,都取决于CPU的心情,各凭本事等着被调用,我们来看看能不能左右CPU
public class TestPriority {
public static void main(String[] args) {
//主线程默认优先级 5
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);
//先设置优先级,再启动
t1.start();
t2.setPriority(Thread.MIN_PRIORITY);//最小优先级 1
t2.start();
t3.setPriority(Thread.MAX_PRIORITY);//最大优先级 10
t3.start();
t4.setPriority(6);
t4.start();
t5.setPriority(4);
t5.start();
}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"----"+Thread.currentThread().getPriority());
}
}
线程的优先级从 1 到 10,从小到大,其实吧,这也不是想象中的咱们可以排序谁先谁后,而是建议CPU谁在前谁在后,这就像买彩票一样,一张票和十张票只是中将概率不同,具体中不中,还是看主任
可以看到,CPU并没有接受我的建议,看来还是人家厉害啊