美文网首页
Java多线程 -- 02 线程生命周期

Java多线程 -- 02 线程生命周期

作者: ql2012jz | 来源:发表于2017-08-31 21:35 被阅读24次
1.线程的生命周期

一个线程要经历如下几种状态:

新建
就绪
运行
阻塞
死亡

(1)新建和就绪状态

新建:当使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它和普通Java对象易一样(没有表现出任何线程的动态特征),仅由Java虚拟机为其分配内存,并初始化其成员变量

就绪状态:当该线程调用了start()方法后(即启动线程),就处于就绪状态,此时Java虚拟机就为其创建方法调用栈、程序计数器,此时线程还没有开始运行,只是表示该线程可以运行了,至于何时运行就有JVM里的线程调度器的调度了,程序员是无法控制的

注意:
1.启动线程是调用start()方法,而不是调用run()。
2.如果直接调用run()方法,即会使run()变成普通方法,而非线程执行体。而且不能在run()方法里通过this.getName()来获取线程名字(此时的线程就是主线程main),须通过Thread.currentThread().getName()
3.直接调用run()方法不会启动另一个线程,即整个程序中只有一个主线程main,此时是程序是单线程程序。
4.只能对处于新建状态的线程调用start(),否则会引发IllegalThreadStateException异常。即直接调用run()之后,原来处于新建状态的线程就不会再处于新建状态了,此时再去调用start()方法就会引发此异常。

(2)运行和阻塞状态

运行:处于就绪状态的线程获得了CPU, 就开始执行run()方法的线程执行体,此时线程处于运行状态
阻塞:当线程在运行过程中被中断时,线程会进入阻塞状态

这里能使运行状态进入阻塞状态的情况:
1.线程调用sleep(long millis)方法,即线程主动放弃处理器的资源
2.线程调用了一个阻塞式IO方法,再该方法返回之前,线程被阻塞
3.线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。
4.线程在等待某个通知(notify)
5.程序调用了线程的suspend()方法将该线程挂起。(该方法易造成死锁,尽量避免使用)

处于阻塞状态的线程会在某个合适的时机进入就绪状态(不是运行状态哦)。
使处于阻塞状态的线程进入就绪的情况:
1.调用sleep()方法到时了
2.线程调用的阻塞式IO方法已返回
3.线程成功的获得了同步监视器
4.线程等待到了想要的通知
5.处于挂起状态的线程被调用了resume()恢复方法

(3)线程死亡

下面的情况会使运行中的线程死亡:
1.run()或call()方法执行完毕,线程正常结束
2.线程抛出一个未捕获的Exception或Error
3.直接调用线程的stop()方法来结束线程。(易造成死锁,慎用)

/***************************/
Thread类的方法
String getName(); //获取当前线程的名字
void start(); //启动线程
static void sleep(long millis); //是当前线程睡眠millis毫秒
void stop();
static void yield();
boolean isAlive();
void suspend();
void resume();

相关文章

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • Java知识梳理六

    一、Java多线程一 1.谈谈线程的生命周期和状态转移 关于线程生命周期的不同状态,在Java 5以后,线程...

  • Java多线程模型

    Java多线程模型 生命周期 Java 线程的生命周期包括创建,就绪,运行,阻塞,死亡 5 个状态。一个 Java...

  • 3个月面试20多次Java后端,总结的面试必会知识点

    Java多线程并发 先来看看并发知识库体系图: Java线程实现/创建方式? 4种线程池 ? 线程生命周期(状态)...

  • Java线程的生命周期

    概览 Java语言中,多线程是由线程的核心概念驱动的,而线程的生命周期会经历以下的不同状态。 Java java....

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 多线程知识点整理

    1、多线程基础 线程的生命周期(状态)NEW:就绪状态Java线程刚刚被创建,调用start()方法之后不代表线程...

  • 线程池任务执行过程

    前言 JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对线线程的整个生命周期进行管...

  • 线程池底层原理

    概述 JAVA通过多线程的方式实现并发,为了方便线程池的管理,JAVA采用线程池的方式对线线程的整个生命周期进行管...

网友评论

      本文标题:Java多线程 -- 02 线程生命周期

      本文链接:https://www.haomeiwen.com/subject/vbmcjxtx.html