java.lang.Thread类解读

2019-02-14  本文已影响0人  圆滚滚_8e70
  1. 一个thread实例就是一个程序的可执行线程。JVM允许一个应用程序拥有多个线程并发执行
  2. 每个线程都有一个优先级(priority),高优先级的线程会比低优先级的线程更早的 \color{red}{注意:优先级范围为1 - 9},创建线程时,默认继承父线程的优先级,main线程的优先级默认为5。线程的优先级只能保护程序内的优先级,不能保证整个操作系统内的优先级。某线程在windows上可能是高优先级,在linux上可能是低优先级。但不影响程序内的优先级顺序。
  3. 线程可以被标记为守护线程。守护线程中创建的线程必定是守护线程。(什么是守护线程呢?守护线程就是主线程结束时,守护线程会跟着主线程一起结束。)

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时,高优先级的线程优先于低优先级的线程。

上一篇下一篇

猜你喜欢

热点阅读