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

javaee初阶-多线程

1.什么是线程

1.1 进程

要了解线程我们首先需要了解什么是进程?

运行的程序在操作系统中以进程的方式运行,比如说电脑打开不同的软件,软件就是不同的进程

1.1.1进程的组织方式

通过双向链表

创建进程就是在双向链表上添加PCB

销毁一个进程就是在双向链表上删除PCB

查看所有进程就是遍历完双向链表

1.1.2进程是操作系统的一个核心概念

进程是系统分配资源的最小单位

1.1.3 进程的运行状态

1.串行:就是一件事干完之后才去干另一件事

2.并行:两件事一起干

3.并发:一会干这件事,一会干另一件事

2.线程和进程的区别

1.每创建一个进程,每个进程内都会有一个主线程

线程调用的是进程启动时向操作系统申请到的资源

线程是进程的子集

2. 创建,销毁,调度线程比进程快

3.线程之间会互相影响,进程不会

⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带⾛(整 个进程崩溃)

4.进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位。

3.创建线程

1.继承Thread类,实现run()方法

class MyThread02 extends Thread{@Overridepublic void run() {while (true){try{Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("hello MyThread thread...");}}

2.实现Runnable接口,重写run()方法

class MyRunnable01 implements Runnable{@Overridepublic void run() {while (true){try{Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("hello my runnable...");}}
}

3.通过匿名内部类的的方式创建Thread子类或者Runnable接口的实现类

Thread thread = new Thread() {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("通过Thread匿名内部类的方法创建");}}};
Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类 Runnable...");}});thread.start();

4.由于Runnable接口是一个函数接口,可以通过lambda表达式的试创建,本质上就是实现了Runnable接口

Thread thread = new Thread(()->{System.out.println("通过Lambda表达式创建线程");});

4.线程的状态

在Java层面,在系统PCB的基础上又做了一层封装

1.NEW: 创建了一个JAVA的线程对象,但是还没开始执行

2.RUNNABLE:线程的状态是运行+就绪,在系统中已经有了与之对应的PCB,随时可以调度到CPU上执行

3.TERMINATED:线程在CPU上执行结束,系统中的PCB以毁,但是JAVA对象还在

4.WAITING:等待状态,死等,没有时间限制 join(),wait()

5.TIMED_WAITING:带时间的等待状态,如join(time),sleep(time) , wait(time)

6.BLOCK: 加入synchronized关键词之后,其他线程等待锁资源的时候出现的状态

http://www.dtcms.com/a/243518.html

相关文章:

  • 电机专用32位MCU PY32MD310,QFN32封装,内置多功能栅极驱动器
  • 曼昆《经济学原理》第九版 第十六章垄断竞争
  • 免部署的数字人 API 调用教程:基于 wav2lip模型训练的开放API,附 PHP 代码示例
  • 大模型与人工智能
  • React Vue 编译/运行流程
  • 11. 线性表的顺序表示和实现(3)
  • 新闻类鸿蒙应用全链路测试实践:性能、兼容性与体验的深度优化
  • 【多模态/T5】[特殊字符] 为什么视频生成模型还在用T5?聊聊模型选择的学问
  • 中兴B860AV1.1江苏移动-自动降级包
  • Spring MVC完全指南 - 从入门到精通
  • 电路板的 “双面绣”:猎板双色油墨如何重塑电子制造新范式
  • 线 性 数 据 结 构 双 雄:栈 与 队 列 的 原 理、实 现 与 应 用
  • HDFS 异构存储及存储策略
  • 《Linux C编程实战》笔记番外:如何避免子进程成为僵尸进程
  • 每日Prompt:人像写真
  • uni-app bitmap.load() 返回 code=-100
  • xilinx的gt的ALIGN_COMMA_WORD设置的作用
  • 鸿蒙新闻应用全链路优化实践:从内核重构到体验革新
  • 实时获取印度国家股票数据 API 实操
  • Explore Image Deblurring via Encoded Blur Kernel Space论文阅读
  • AIStor 的模型上下文协议 (MCP) 服务器: 工作原理
  • [Git] 配置 Git
  • 3D IC(立体集成电路)的生态机会
  • 多项目资源如何高效配置与再分配?
  • 【JavaAPI搜索引擎】项目测试报告
  • JSON 是什么?核心概念与语法解析
  • 神经网络:深度剖析过拟合、欠拟合及其泛化能力提升策略
  • 计算机视觉与深度学习 | 基于Matlab的低照度图像增强算法:全面总结与实现
  • K8S多维度问题排查
  • 安卓中草药宝典 V2.6上千种中草药知识学习