线程的优先级和线程的状态

202 阅读1分钟

线程的优先级

  1. Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行,最后谁先被调用,还是得看CPU的心情
  2. 默认优先级为5.
  3. 通过Thread.setPriority来设定线程的优先级
  4. 在线程开始方法被调用之前,线程的优先级应该被设定
  5. 可以使用常量,如MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY来设定优先级。
  6. 线程优先级是一个整数,取值范围为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();
            }
        }


    }
}

输出结果: