旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

Java线程的生命周期的引见(附示例)【JAVA教程】,Java

作者:搜教程发布时间:2019-11-27分类:JAVA教程浏览:70评论:0


导读:本篇文章给人人带来的内容是关于Java线程的生命周期的引见(附示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。一、线程的生命周期历程与线程一样,都...
本篇文章给人人带来的内容是关于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();
        }
    }
}

下面是部份运转效果截图:

能够看到假如同时启动的线程越多,会致使每一个线程的耗时越长。

以上就是Java线程的生命周期的引见(附示例)的细致内容,更多请关注ki4网别的相干文章!

标签:Java


欢迎 发表评论: