当前位置: 首页 > news >正文

JavaEE线程概念

一、线程和进程概念

线程是程序执行的最小单元,属于进程的一个实体。一个进程包含多个线程,线程共享的资源有内存空间、文件句柄。

线程特性:

  • 轻量级:线程的开销相比进程小很多,线程仅需要少量资源就行。
  • 并发执行:多个线程可以同时间并发执行,线程之间互不干扰。
  • 共享资源: 同一进程的线程共享线程资源,多个进程可以同时访问进程的全局变量。

进程和线程的区别:
进程是程序的一次执行过程,资源分配的最小单位,进程之间通信复杂;线程是进程一个执行单位,程序执行流的最小单位,进程之间通信简单。

线程的生命周期:

  • New状态:
//创建线程对象,未启动,线程没有执行任务代码
Thread t = new Thread(()->{while(true){System.out.println("hello thread");try{Thread.sleep(1000);}catch(InterruptedException){throw new RuntimeException(e);}}});
  • Runable状态:
    调用线程的start()方法,线程从新建状态转变为就绪状态,具备执行条件。
Thread thread = new Thread(() -> {System.out.println("线程正在执行");
});
thread.start();

调用start()方法之后,不会立即执行,线程进行就绪状态,等待调度的阶段。

  • Blocked状态:
    执行过程因为一些因素,无法继续执行,进入阻塞状态,阻塞状态不占用CPU,解决阻塞问题之后,线程才会进入Runable状态

  • Waiting状态:
    线程进入等待状态,需要被显式唤醒才能继续执行

  • Terminated状态:
    执行完run()或者因为异常,线程提前终止,线程进入死亡状态,处于这个状态的线程无法重启,会被JVM回收。

二、创建多线程的五种方式

1、实现Runable接口:

  • 实现Runable接口中的run()方法,使用Thread类构造函数传入Runable对象,调用start()方法启动线程。
Thred t = new Thred(new MyRunable());
t.start();

2、继承Thred类:
继承Thred类并重写run()方法,创建Thred子类对象并调用start()启动线程。

MyThread t = new MyThread();
t.start();

3、使用Callable和FutureTask
实现Callable接口的call()方法,使用FutureTak包装Callable对象

FutureTask<Integer> task = new FutureTask<>(new MyCallable());
Thread thread = new Thread(task);
thread.start();

4、线程池
通过ExecutorService提交Runable或Callable,不直接创建和管理线程,适合大量并发任务。

ExecutorService excutor = Executors.newFixedThredPool((10));
executor.submit(new MyRunable());

5、CompletableFuture
本质也是线程池,Java8引入的,方便进行异步任务调用,通过多种方法轻松处理异步任务之间的依赖关系.

CompletableFuture<Void> future1 = ComletabbleFuture.runAsync(()->{});
http://www.lryc.cn/news/578703.html

相关文章:

  • 人工智能在人力资源领域的深度变革:从技术适配到价值重构
  • AngularJS 安装使用教程
  • 转录组分析流程(七):GSEA分析
  • CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)
  • eNSP实验一:IPv4编址及IPv4路由基础
  • 统计labelme标注的json文件中各类别的标注数量
  • 百度轮岗:任命新CFO,崔珊珊退居业务二线
  • 数据结构:递归:组合数(Combination formula)
  • sqlmap学习ing(2.[第一章 web入门]SQL注入-2(报错,时间,布尔))
  • 【C++】inline的作用
  • 《UE5_C++多人TPS完整教程》学习笔记40 ——《P41 装备(武器)姿势(Equipped Pose)》
  • SQL学习笔记6
  • Linux基本命令篇 —— grep命令
  • python训练day46 通道注意力
  • 【Python】断言(assert)
  • 【1.7 漫画Java核心并发编程】
  • 【Unity实战】UI按钮回调管理:职责分离与持久化策略
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的抖音渠道力拓展与多渠道利润增长研究
  • react-别名路径配置
  • Git 运行.sh文件
  • Hadoop、Spark、Flink 三大大数据处理框架的能力与应用场景
  • SSVEP Next:现代化的 SSVEP 可视化 Web 快速实现
  • GPT-1论文阅读:Improving Language Understanding by Generative Pre-Training
  • OSPF虚拟链路术语一览:快速掌握网络路由
  • rocketmq 之 阿里云转本地部署实践总结
  • Rust 是什么
  • GPIO详解:不仅仅是输入输出那么简单
  • RagFlow 源码部署启动指南
  • 【文件读取】open | with | as
  • js filter()