Java并发编程基础-线程简介

简介: 章节目录1.线程定义2.使用多线程的优势3.线程优先级4.线程的状态5.Daemon 线程1.线程定义进程与线程的区别1.进程是cpu进行资源分配的独立单位,指的是程序在数据集合上的一次运行过程。

章节目录

  • 1.线程定义
  • 2.使用多线程的优势
  • 3.线程优先级
  • 4.线程的状态
  • 5.Daemon 线程

1.线程定义

进程与线程的区别

1.进程是cpu进行资源分配的独立单位,指的是程序在数据集合上的一次运行过程。
2.线程是cpu 进行调度的最小单位,在一个进程中会创建多个线程。
AI 代码解读

线程拥有的独立资源

栈中数据是线程独享的,包括局部变量、程序计数器等
堆中数据是线程共享的,如线程同时操作堆中某对象的某属性。
AI 代码解读

Java程序运行的实质

一个程序的运行不仅仅是main()方法的运行,而是main线程和多个其他线程共同运行
AI 代码解读

2.使用多线程的优势

1.充分利用更多的处理核心
2.更快的响应时间

   例如,一笔订单的创建,它包括插入订单数据,生成订单快照,发送邮件通
知买家和记录货品销售数量等, 用户从单击“订购按钮" 开始,就要等待这些操
作全部完成才能看到订购成功的结果,但是这么多的业务操作,如何才能够跟快的完成?
   在上面的场景中,我们可以使用多线程技术,即将数据一致性不强的操作派发
给其他线程处理,好处是响应用户请求的线程能更快的处理完成,缩短了响应时间,提升了用户体验。
AI 代码解读

3.线程优先级

thread.setPriority(10),线程优先级从1-10顺序排列

4.线程的状态

Java线程在运行的声明周期中可能处于如下表所示的6中状态,在给定的一个时刻,线程只能处于其中一个状态。

状态名称 说明
new 初始状态,线程被构建,但是还没有调用start()方法
runnable 运行状态,Java线程将操作系统中的就绪运行两种状态统称为"运行中"
block 阻塞状态,表示线程等待资源可用,如i/o 或者阻塞于锁
waiting 等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断)
time_waiting 超时等待状态,该状态不同于waiting,它是可以在指定的时间自行返回的
terminated 终止状态,表示当前线程执行完毕

如下图所示,为java线程状态变迁图:

img_e207e30e3532bbeea003a8ffbde88833.png
java线程状态变迁图

1.线程创建之后,调用start()方法,状态变更为可运行状态,待资源准备就绪后,开始运行。
2.线程执行 lockObject.wait() 方法,线程进入等待状态。
3.进入等待状态的线程依靠其他线程的通知才能返回到运行状态。
4.超时等待相当于在等待状态基础上增加超时限制,超时时间到达会自动返回到运行状态。
5.线程调用同步方法,在没有获取锁的情况下,线程会进入到阻塞状态。
6.线程在执行Runable 的run()方法后,进入终止状态。

Daemon线程
支持性线程,被用作程序中后台调度以及支持性工作。
当一个Java虚拟机中不存在非Daemon线程时,JVM将退出。
可以通过调用Thread.setDaemon(true)将线程设置为Daemon线程。
Daemon属性需要在启动线程前执行,不能在启动线程之后启动。

注意:Daemon线程被用作完成支持性工作,但在Java虚拟机退出时,Daemon线程中的finally不一定会执行。
如下代码所示:

public class Daemon {
  
    static class DaemonRunner implements Runnable {
        public void run(){
            try{
                TimeUnit.Second.sleep(10);//沉睡10s
            }finally{
                System.out.println("Daemon thread finally run");//执行类似资源回收动作
            }
        }   
    }
}
AI 代码解读

当JVM中已经没有非Daemon线程,虚拟机就要退出。JVM中所有Daemon线程需要立即终止,因此finally块并没有执行。

目录
打赏
0
0
0
0
6
分享
相关文章
2025 更新必看:Java 编程基础入门级超级完整版指南
本教程为2025更新版Java编程基础入门指南,涵盖开发环境搭建(SDKMAN!管理JDK、VS Code配置)、Java 17+新特性(文本块、Switch表达式增强、Record类)、面向对象编程(接口默认方法、抽象类与模板方法)、集合框架深度应用(Stream API高级操作、并发集合)、模式匹配与密封类等。还包括学生成绩管理系统实战项目,涉及Maven构建、Lombok简化代码、JDBC数据库操作及JavaFX界面开发。同时提供JUnit测试、日志框架使用技巧及进阶学习资源推荐,助你掌握Java核心技术并迈向高级开发。
136 5
Java 编程进阶实操中工具集整合组件封装方法与使用指南详解
本文详细介绍Hutool工具集和图书管理系统相关组件的封装方法及使用示例。通过通用工具类封装(如日期格式化、字符串处理、加密等)、数据库操作封装(结合Hutool DbUtil与MyBatis)、前端Vue组件封装(图书列表与借阅表单)以及后端服务层封装(业务逻辑实现与REST API设计),帮助开发者提升代码复用性与可维护性。同时,提供最佳实践建议,如单一职责原则、高内聚低耦合、参数配置化等,助力高效开发。适用于Java编程进阶学习与实际项目应用。
108 10
java 编程基础入门级超级完整版教程详解
这份文档是针对Java编程入门学习者的超级完整版教程,涵盖了从环境搭建到实际项目应用的全方位内容。首先介绍了Java的基本概念与开发环境配置方法,随后深入讲解了基础语法、控制流程、面向对象编程的核心思想,并配以具体代码示例。接着探讨了常用类库与API的应用,如字符串操作、集合框架及文件处理等。最后通过一个学生成绩管理系统的实例,帮助读者将理论知识应用于实践。此外,还提供了进阶学习建议,引导学员逐步掌握更复杂的Java技术。适合初学者系统性学习Java编程。资源地址:[点击访问](https://pan.quark.cn/s/14fcf913bae6)。
127 2
Java 编程进阶实操之工具集整合应用指南
本文聚焦Java编程进阶实操,涵盖并发编程、性能优化及数据库操作优化等核心知识点,并结合Hutool、Postman、Git等实用工具,提供从理论到实践的学习路径。通过小型图书管理系统实战项目,详细解析技术选型与实现步骤,助力开发者掌握Spring Boot、MyBatis等框架应用。同时展望Java新特性与技术趋势,为职业发展奠定基础。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
64 1
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
2025 年 Java 秋招面试必看 Java 并发编程面试题实操篇
Java并发编程是Java技术栈中非常重要的一部分,也是面试中的高频考点。本文从基础概念、关键机制、工具类、高级技术等多个方面进行了介绍,并提供了丰富的实操示例。希望通过本文的学习,你能够掌握Java并发编程的核心知识,在面试中取得好成绩。同时,在实际工作中,也能够运用这些知识设计和实现高效、稳定的并发系统。
39 0
2025 年 Java 秋招面试必看的 Java 并发编程面试题汇总
文章摘要: 本文系统梳理Java并发编程核心知识点,助力2025年秋招面试。内容涵盖:1)基础概念,包括线程/进程区别、创建线程的3种方式(Thread/Runnable/Callable)、6种线程状态及转换;2)关键机制,对比sleep()与wait()的锁行为差异,解释start()而非run()启动线程的原因;3)工具类与典型应用场景。通过技术原理与代码示例结合的方式,帮助开发者深入理解并发模型、线程同步等核心问题,为高并发系统设计打下坚实基础。(150字)
63 0
Java并发编程之Future与FutureTask
本文深入解析了Future接口及其实现类FutureTask的原理与使用。Future接口定义了获取任务结果、取消任务及查询任务状态的规范,而FutureTask作为其核心实现类,结合了Runnable与Future的功能。文章通过分析FutureTask的成员变量、状态流转、关键方法(如run、set、get、cancel等)的源码,展示了异步任务的执行与结果处理机制。最后,通过示例代码演示了FutureTask的简单用法,帮助读者更直观地理解其工作原理。适合希望深入了解Java异步编程机制的开发者阅读。
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
91 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问