一、Java线程的调度方法:
1、同优先级线程组成先进先出队列(先到先服务),使用时间片策略。
2、对高优先级,使用优先调度的抢占式策略。
二、Java线程的优先级:
1、线程的优先级等级
MAX_ PRIORITY: 10、 MIN_ PRIORITY: 1、 NORM PRIORITY: 5
2、涉及的成员方法
getPriority():返回线程优先值。
setPriority(int newPriority):改变线程的优先级。
线程创建时继承父线程的优先级。
低优先级只是获得调度的概率低,并非一定是在高优先级线程之后才被调用。
三、Java线程的分类:
Java中的线程分为两类:一种是守护线程,一种是用户线程。
●它们在几乎每个方面都是相同的,唯一的区别是判断JVM何时离开。
●守护线程是用来服务用户线程的,通过在start()方法前调用。
thread.setDaemon(true)可以把一个用户线程变成一个守护线程。
●Java垃圾回收就是一个典型的守护线程。
●若JVM中都是守护线程,当前JVM将退出。(兔死狗烹,鸟尽弓藏)
JDK中用Thread.State类定义了线程的几种状态:
要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象
来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:
(1)新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。
(2)就绪:处于新建状态的线程被star()后,将进入线程队列等待CPU时间片,
此时它已具备了运行的条件,只是没分配到CPU资源。
(3)运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,
run()方法定义了线程的操作和功能。
(4)阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,
让出CPU并临时中止自己的执行,进入阻塞状态。
(5)死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束。
原文地址:https://www.cnblogs.com/ZengBlogs/p/12203363.html