- 一个thread实例就是一个程序的可执行线程。JVM允许一个应用程序拥有多个线程并发执行
- 每个线程都有一个优先级(priority),高优先级的线程会比低优先级的线程更早的 ,创建线程时,默认继承父线程的优先级,main线程的优先级默认为5。线程的优先级只能保护程序内的优先级,不能保证整个操作系统内的优先级。某线程在windows上可能是高优先级,在linux上可能是低优先级。但不影响程序内的优先级顺序。
- 线程可以被标记为守护线程。守护线程中创建的线程必定是守护线程。(什么是守护线程呢?守护线程就是主线程结束时,守护线程会跟着主线程一起结束。)
Demo for 2:
写了个demo来验证观点2 ()
public class PriorityThreadTestDemo {
public static void main(String[] args) {
PriorityTestThread thread1 = new PriorityTestThread("Thread1");
PriorityTestThread thread2 = new PriorityTestThread("Thread2");
thread1.setPriority(5);
thread2.setPriority(9);
thread1.start();
thread2.start();
}
}
public class PriorityTestThread extends Thread{
public PriorityTestThread(String name) {
super(name);
}
@Override
public void run(){
System.out.println("thread " + this.getName() + " running.");
}
}
按预计线程2的优先级比线程1的高,所以应该
执行结果出人意料,并不是说优先级高的会先执行.
执行结果1:
thread Thread1 running.
thread Thread2 running.
执行结果2:
thread Thread2 running.
thread Thread1 running.
那观点2 具体是什么意思呢?为什么执行的结果和说明不一致呢?
其实线程的优先级只会在线程之间竞争CPU的时候产生作用,并发请求CPU时,高优先级的线程优先于低优先级的线程。
网友评论