线程的创建、启动、生命周期和调度
线程是指正在执行的一个指令序列。线程是处理器调度的基本单位,但不是资源分配单位。
线程对象是指可以产生线程的对象。
创建线程:要使用线程,首先需要创建线程。在java语言中,创建线程有两种方式,可以继承java.lang.Thread类或者实现Runnable接口。
启动线程:线程创建完成后,通过线程的启动来执行线程。类Thread定义了start()方法用来完成线程的启动。
1.线程的创建:在线程类使用new关键字实例化之后且在调用start()方法之前,线程处于创建状态。处于创建状态的线程仅仅分配了内存空间,属于生命周期的初始状态。
2.就绪:在线程调用了start()方法后即处于就绪状态。处于就绪状态的线程具备了出CPU之外运行所需的所有资源。就绪状态线程排队等待CPU,由系统调度为其分配。
3.运行:处于就绪状态的线程获得CPU之后处于运行状态。处于运行状态的线程才开始真正执行线程run()方法的内容。
4.阻塞:处于运行状态的线程如果因为某种原因不能继续执行,则进入阻塞状态。阻塞状态与就绪状态的不同是:就绪状态只是因为缺少CPU而不能执行,而阻塞状态是由于各种原因引起线程不能执行,不仅仅是缺少CPU。引起阻塞的原因解除以后,线程再次转为就绪状态,等待分配CPU运行。
5.死亡:当线程执行完run()方法的内容或被强制终止时,线程处于死亡状态,线程的整个生命周期结束。
线程在整个生命周期中始终处于某种状态,从一种状态到另外一种状态的转换由线程调度方法实现。
处于生命周期中的线程,通过调度实现各种状态间的转换。线程的调度是使用各种调度方法,如:
setPriority() 设置优先级 线程的优先级是指线程被系统调度执行时的优先执行级别。
sleep() 线程休眠
yield() 线程让步
join() 线程等待
在java语言中使用synchronized关键字实现线程同步