Java–线程Thread生命周期的几种状态相互转换及常用API方法说明

Java–线程Thread生命周期的几种状态相互转换及常用API方法说明大家好 我是贾斯汀 今天主要聊一聊关于线程的瓜 先来看一下线程这张图线程的几种运行状态之间运行流程 看不懂没关系 慢慢来学习 往下学习来继续了解一下 什么是线程 线程是进程的一部分 是程序执行中的一条执行路线 进程就是指程序在其自身地址空间的一次执行活动 是程序独立运行的基本单位 一个进程可以包含多条线程 一个条线程对应一个进程中的一条执行路线 线程的几种创建方式 主要由四种方式创建线程具体每一种创建方式说明及代码实现如下 创建 Thread 线



❤️‍大家好,我是贾斯汀,今天主要聊一聊关于线程的瓜!❤️‍


先来看一下线程这张图线程的几种运行状态之间运行流程:
在这里插入图片描述
看不懂没关系,慢慢来学习,往下学习来继续了解一下~




什么是线程?


  • 线程是进程的一部分,是程序执行中的一条执行路线;
  • 进程就是指程序在其自身地址空间的一次执行活动,是程序独立运行的基本单位;
  • 一个进程可以包含多条线程,一个条线程对应一个进程中的一条执行路线。
    在这里插入图片描述

线程的几种创建方式?


主要由四种方式创建线程:
在这里插入图片描述

  • 方式1:继承Thread类,重写run(),无返回值
  • 方式2:实现Runnable接口,重写run(),无返回值
  • 方式3:新建FutureTask + 实现Callable接口,重写call(),有返回值
  • 方式4:通过Executors工具类创建线程池 + 调用submit + 重写Callable接口,重写call(),有返回值

具体每一种创建方式说明及代码实现如下:

/ * 创建Thread线程的四种方式之内部类写法 */ public class NewThread { 
       public static void main(String[] args) throws Exception { 
       //方式1 Thread t1 = new Thread(){ 
       @Override public void run() { 
       System.out.println("方式1:继承Thread类并重写run()方法创建线程,无返回值"); } }; t1.start(); Thread.sleep(1000); //方式2 Thread t2 = new Thread(new Runnable() { 
       @Override public void run() { 
       System.out.println("方式2:实现Runnable接口并重写run()方法创建线程,无返回值"); } }); t2.start(); Thread.sleep(1000); //方式3 FutureTask<String> ft = new FutureTask<>(new Callable<String>() { 
       @Override public String call() throws Exception { 
       String result = "方式3:实现Callable接口并重写call()方法新建FutureTask对象作为new Thread实例化参数创建线程,有返回值"; return result; } }); Thread t3 = new Thread(ft); t3.start(); System.out.println(ft.get()); //输出返回值 Thread.sleep(1000); //方式4 ExecutorService pool = Executors.newFixedThreadPool(5); Future<String> future = pool.submit(new Callable<String>(){ 
       @Override public String call() throws Exception { 
       String result = "方式4:通过工具类Executors创建线程池,调用submit新建Future对象并重写Callable接口重写call()方法创建线程,有返回值"; return result; } }); pool.shutdown();//关闭线程池 System.out.println(future.get()); //输出返回值 } } 

线程的几种状态?


  • 新建(new):通过上面介绍的某种方式新建线程即处于新建状态;
  • 就绪(Ready):调用线程的start()方法,首先进入就绪状态,等待获取CPU时间;
  • 运行(Running):就绪状态的线程获取到CPU时间或阻塞状态的线程恢复都可进入运行状态;
  • 阻塞(Blocked):运行状态的线程可能因为IO阻塞或在synchronized同步代码块中都可进入阻塞状态;
  • 死亡(Dead):正常运行的线程执行结束或就绪状态的线程直接调用stop()方法就会进入死亡状态;
  • 睡眠(Sleeping):调用sleep方法指定线程睡眠多久,会释放CPU资源,但不释放锁资源,睡眠时间到后会重新进入就绪状态;
  • 等待(Waiting):调用wait会让线程短暂的处于等待中,会释放CPU资源,并且释放锁资源,进入就绪状态。
    在这里插入图片描述

线程相关的核心方法及作用?


  • start:调用start()方法底层源码会判断线程状态是否是新建状态,不是则直接抛异常,并且后续会调用一个native本地方法start0,其底层通过JVM来进行调度最后调用run()方法执行;
  • run:调用run()方法,底层会直接进入到重写的run()方法并执行代码块内容;
  • sleep:属于Thread类的一个native本地static静态方法,可以在任何地方调用sleep(1000)方法,期间会让当前线程进入睡眠状态1秒钟,并让出CPU资源,但不释放锁资源
  • wait:属于Object类的一个方法,只能在synchronized同步块中进行调用wait(1000)方法,期间会让当前线程进入等待状态1秒钟,不仅会让出CPU时间,还释放并释放对象锁资源
  • yield:跟sleep一样,也是Thread类的一个native本地static静态方法,与sleep的最大区别在于Thread.yield()不需要指定暂停时间,并不会阻塞线程,而是进入就绪状态,短暂的让出CPU资源,这份CPU资源可能自己会再次获取到,这个取决于调度器;
  • notify:同wait一样,也是属于Object类的一个方法,作用是可以将wait()后等待的线程进行单个唤醒,并进入Read就绪状态;
  • notifyAll:同notify一样,也是属于Object类的一个方法,作用将当前对象上的所有等待线程唤醒,并进入Read就绪状态;
  • stop:该方法已被废弃,不建议使用,该方法的作用是直接将线程结束,进入死亡状态;
  • interrupt:冲断线程,不保证线程进入死亡、就绪还是继续运行,不想stop可以直接冲断一个正在运行的线程。


What’s up!不来个点赞支持一下,这手指是金子做的?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227369.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:28
下一篇 2026年3月16日 下午9:28


相关推荐

  • BufferedWriter使用write方法如何换行

    BufferedWriter使用write方法如何换行BufferedWriter对象自带newline()方法可以换行,但如果在字符串中部换行,不想用newline()方法该如何做呢?使用\n是无法实现的,使用\n后,只会出现一个空格,并未实现换行,在想要实现换行的地方加入\r\n就可以了例如Filefile=newFile(“d:/ioPractice/text.txt”);Writerfw=newFileWrite

    2022年6月10日
    69
  • github最新最快有效host地址

    github最新最快有效host地址github140.82.112.4github.com140.82.113.3gist.github.com185.199.108.153assets-cdn.github.com199.232.68.133raw.githubusercontent.com199.232.68.133gist.githubusercontent.com199.232.68.133cloud.githubusercontent.com151.101.192.133camo.githubuserc

    2022年7月16日
    22
  • ssh公私钥登录方式设置

    ssh公私钥登录方式设置

    2022年1月30日
    48
  • sscanf,sscanf_s及其相关使用方法「建议收藏」

    sscanf,sscanf_s及其相关使用方法

    2022年1月18日
    220
  • 土地利用分类详细教程——以高分一号影像为例(上)

    土地利用分类详细教程——以高分一号影像为例(上)1 前言相信跟我一样刚刚接触遥感的计算机人士来讲 突然转行开始弄遥感 刚开始肯定会一头雾水 更别说什么土地利用分类的制作了 在这里 我将会用最为直接的图形流程操作来给像我一样初识遥感的童鞋们讲解一下制作土地利用的整个过程 首先 我先用一幅流程图来概括一下制作土地利用的整个过程 如下图 1 所示 图 1 土地利用分类流程图这个流程操作适用于一般影像制作土地利用过程 然

    2026年3月16日
    3
  • EM算法 实例讲解「建议收藏」

    EM算法 实例讲解「建议收藏」第一次接触EM算法,是在完成半隐马尔科夫算法大作业时。我先在网上下载了两份Baum-Welch算法的代码,通过复制粘贴,修修补补,用java实现了HMM算法(应用是韦小宝掷两种骰子的问题)。然后,参考有关半隐马尔科夫算法的论文,照着论文中的公式修改隐马尔科夫算法,完成了大作业。现在回想起来,就隐隐约约记得有一大堆公式。最近,我看到一篇很好的文章,对EM算法的计算有了进一步的了解,文章链接为http

    2022年6月22日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号