• Java 线程的生命周期


    🙈作者简介:练习时长两年半的Java up主
    🙉个人主页:程序员老茶
    🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎
    📚系列专栏:Java全栈,计算机系列(火速更新中)
    💭 格言:种一棵树最好的时间是十年前,其次是现在
    🏡动动小手,点个关注不迷路,感谢宝子们一键三连

    课程名:Java

    内容/作用:知识点/设计/实验/作业/练习

    学习:Java 线程的生命周期

    Java 线程的生命周期

    在 Java 中,线程是程序执行的最小单位。线程的生命周期是指线程从创建到销毁的一系列过程。本文将介绍 Java 线程的生命周期以及如何管理线程的生命周期。

    在这里插入图片描述

    1. 线程的生命周期

    Java 线程的生命周期包括以下几个阶段:

    1. 新建(New):线程对象被创建后,就进入了新建状态。此时,线程对象已经分配了内存空间,但还没有开始执行。

    2. 就绪(Runnable):当调用线程对象的 start() 方法时,线程进入就绪状态。此时,线程已经具备了运行的条件,等待系统分配 CPU 时间片。

    3. 运行(Running):当线程获得 CPU 时间片后,就开始执行 run() 方法中的代码。线程在运行过程中可能会阻塞,等待 I/O 操作完成或其他条件满足。

    4. 阻塞(Blocked):当线程遇到某些条件无法继续执行时,就会进入阻塞状态。例如,当线程等待 I/O 操作完成时,就会进入阻塞状态。

    5. 等待(Waiting):当线程在运行过程中调用了 wait()join()LockSupport.park() 方法时,线程会进入等待状态。此时,线程会释放 CPU 资源,等待其他线程唤醒它。

    6. 超时等待(Timed Waiting):当线程调用了 sleep()wait(long timeout)join(long millis) 方法时,线程会进入超时等待状态。此时,线程会释放 CPU 资源,等待指定的时间或条件满足。

    7. 终止(Terminated):当线程执行完 run() 方法后,或者因为异常而终止,线程就会进入终止状态。此时,线程对象会被回收,内存空间会被释放。

    2. 线程生命周期的管理

    在 Java 中,可以通过以下几种方式来管理线程的生命周期:

    1. 使用 Thread 类的 start()run() 方法:这是创建和启动线程的最常用方法。通过调用线程对象的 start() 方法,可以启动线程并使其进入就绪状态。然后,线程会自动执行 run() 方法中的代码。
    public class MyThread extends Thread {
        @Override
        public void run() {
            // 线程执行的代码
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            MyThread myThread = new MyThread();
            myThread.start(); // 启动线程
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. 使用 ExecutorServiceExecutorService 是一个高级的线程池接口,提供了丰富的线程管理功能。通过 ExecutorService 可以创建和管理线程,例如提交任务、关闭线程等。
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class MyThread implements Runnable {
        @Override
        public void run() {
            // 线程执行的代码
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池
            MyThread myThread = new MyThread();
            executorService.submit(myThread); // 提交任务到线程池
            executorService.shutdown(); // 关闭线程池
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 使用 synchronized 关键字:synchronized 关键字可以用于控制多线程之间的同步,保证线程安全。当一个线程访问一个对象的 synchronized 方法或代码块时,其他线程将无法访问该方法或代码块,直到当前线程释放锁。
    public class MyThread {
        private Object lock = new Object(); // 创建一个锁对象
    
        public void doSomething() {
            synchronized (lock) { // 获取锁
                // 线程执行的代码
            } // 释放锁
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3. 总结

    本文介绍了 Java 线程的生命周期以及如何管理线程的生命周期。线程生命周期是线程从创建到销毁的一系列过程,了解线程生命周期有助于我们更好地管理和控制线程。在实际开发中,我们可以根据需要选择合适的方法来管理线程的生命周期。

    往期专栏
    Java全栈开发
    数据结构与算法
    计算机组成原理
    操作系统
    数据库系统
    物联网控制原理与技术
  • 相关阅读:
    数据仓库的实际应用示例-广告投放平台为例
    初识Vue3
    HIVE源码阅读(五)
    Navicat将视图结构导出为可运行SQL文件
    【Apache Spark 】第 12 章结语:Apache Spark 3.0
    vue3入门,其实吧,压力也没那么大
    JSP旅馆房间预订管理系统myeclipse定制开发mysql数据库网页模式java编程jdbc
    十三、函数式编程(3)
    跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样
    [Ubuntu 18.04] 搭建文件夹共享之Samba服务器
  • 原文地址:https://blog.csdn.net/qq_53431712/article/details/133691912