Rumah  >  Artikel  >  Java  >  Java线程的生命周期的介绍(附示例)

Java线程的生命周期的介绍(附示例)

不言
不言ke hadapan
2019-04-13 10:01:096136semak imbas

本篇文章给大家带来的内容是关于Java线程的生命周期的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、线程的生命周期

进程与线程一样,都具有一定的生命周期,线程的生命周期包括四个状态:创建状态、就绪状态、阻塞状态、死亡状态。

1.创建状态

1)是指使用new实例化一个线程对象,但该线程对象还未使用start()方法启动线程这个阶段,该阶段只在内存的堆中为该对象的实例变量分配了内存空间,但线程还无法参与抢夺CPU的使用权;

2)创建完毕线程对象后,启动该线程对象的是start()方法,而不是run()方法。

2.就绪状态

1)是指一个线程对象使用start()方法后到运行完run()方法的这个阶段,线程一旦就进入就绪阶段,Java虚拟机为该线程创建方法的调用栈和计数器等;

2)在某一单位时间(时间片)内,CPU只能运行一个线程,一但一个线程拥有了CPU的使用权,则该线程也可称为正在运行状态;

3)凡是处于就绪状态的线程都被视为活动的,可以使用isAlive()方法测试线程是否处于就绪状态,使用activeCount()查询当前线程所在线程池的活动线程数;

4)处于就绪状态的线程并不是运行状态,在以前的计算机很多都是单处理器的,要在同一时刻运行所有处于就绪状态的线程是不可能的,Java通过一些调度算法来保证这些线程共享使用处理器(如时间片轮转算法、独占算法等)。

3.阻塞状态:

1)阻塞状态包含四种状态(睡眠状态、阻塞状态、挂起状态、等待状态),一般来说,阻塞状态和就绪状态可以相互切换的;

2)使用sleep()方法可以线程进入睡眠状态,让其他进程得到运行机会,但是用sleep方法必须捕获InterruptedExecption异常;

3)使用suspend方法可以挂起线程(jdk1.2后已过时)、使用wait方法使线程进入等待状态(后面有一随笔会专门写)、使用I/O中断让线程进入阻塞状态。

4.死亡状态:

1)一旦线程运行完run方法,线程即进入死亡状态,Java虚拟机会销毁处于死亡状态的线程对象所占用的系统资源;

2)线程执行时遇到一个未捕获的异常,线程会被终止并进入死亡状态;调用stop方法也可以让线程进入死亡状态,但是容易造成死锁,已弃用。

5.线程生命周期如下图:

二、下面是sleep方法使线程进入睡眠状态的案例

/**
 * @author: PrincessHug
 * @date: 2019/4/12, 9:20
 * @Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class SleepDemo  implements Runnable{
    @Override
    public void run() {
        long l;
        for (int i=1;i<6;i++){
            l = System.currentTimeMillis();
            try {
                Thread.currentThread().sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            l = (System.currentTimeMillis() - l);
            System.out.println(Thread.currentThread().getName() + "线程执行了" + i + "次,耗时" + l + "毫秒。");
        }
    }
}
public class SleepDriver {
    public static void main(String[] args) {
        SleepDemo sd = new SleepDemo();
        for (int i=0;i<50;i++){
            new Thread(sd,i + "#").start();
        }
    }
}

下面是部分运行结果截图:

可以看到如果同时启动的线程越多,会导致每个线程的耗时越长。

Atas ialah kandungan terperinci Java线程的生命周期的介绍(附示例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:segmentfault.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam