当前位置: 首页 > 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.xdnf.cn/news/987949.html

相关文章:

  • C++基础
  • Oracle集群OCR磁盘组掉盘问题处理
  • echart pie label.rich 颜色设置与项目同色
  • matlab红外与可见光图像配准算法
  • Flask 报错修复实战:send_file() got an unexpected keyword argument ‘etag‘
  • 什么是Power Distribution Unit(PDU)以及智能PDU:应用的演变历程
  • C#简单线程启动的几种方法总结
  • Windows平台网络通信
  • SQL Server 查询数据库中所有表中所有字段的数据类型及长度
  • 从“字对字“到“意对意“:AI翻译正在重塑人类的语言认知模式
  • 从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版
  • 医疗行业双碳战略升维:从合规达标到价值创造的转型路径
  • JavaWeb(JavaBean预习)
  • 智慧园区智能化整体解决方案
  • c#实现绝对路径和相对路径的转换
  • 黑马python(四)
  • CentOS Stream 9——RustDesk基础版自建教程(Docker)
  • <script> 标签的 async 与 defer 属性详解
  • 《Linux C编程实战》笔记番外:如何避免子进程成为僵尸进程
  • 阿里云unbantu、Flask部署模型的一个错误
  • 安卓+苹果端签名教程
  • SiteAzure:文章删除后,前台还能搜索到
  • HarmonyOS - UIObserver(无感监听)
  • TF-IDF算法的代码实践应用——关键词提取、文本分类、信息检索
  • 帆软 BI 从入门到实战全攻略(一):安装激活与添加数据
  • 大量RPM仓库管理指南:更新与批量获取实战手册
  • VS2017----打开ui文件几秒后闪退
  • 汇编(函数调用)
  • 刷新网站 favicon 的几种方法
  • 医院重症监护系统 ICU重症病房管理系统 重症监护软件