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

Java—初始多线程

多线程的理解

进程:

进程是程序的基本执行实体

每一个运行的软件都是一个进程

线程:

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

简单理解:应用软件中互相独立,可以同时运行的功能

同时运行的程序比较多就形成了多线程

多线程:可以提高程序的运行效率。

总结:

1.什么是多线程?

有了多线程,我们就可以让程序同时做多件事情

2.多线程的作用?

提高效率

3.多线程的应用场景?

只要你想让多个事情同时运行就需要用到多线程

比如:软件中的耗时操作、所有的聊天软件、所有的服务器

多线程的俩个概念并发和并行

并发:在同一时刻,有多个指令在单个CPU上交替执行

举例理解:就像我们一边打游戏,一边吃东西,一边喝水一样,我们的打游戏喝水吃东西都是一个线程。

并行:在同一时刻,有多个指令在多个CPU上同时执行

多线程的实现方式

①继承Thread类的方式进行实现

②实现Runnable接口的方式进行实现

③利用Callable:接口和Future接口方式实现

①继承Thread类的方式进行实现

多线程的第一种启动方式:

1.自己定义个类继承Thread

2.重写run方法

3.创建子类的对象,并启动线程

第一步:自己定义个类继承Thread

第二步:重写run方法

3.创建子类的对象,并启动线程

②实现Runnable接口的方式进行实现

多线程的第二种启动方式:

1.自己定义一个类实现Runnable接口

2.重写里面的run方法

3.创建自己的类的对象

4.创建一个Thread类的对象,并开启线程

③利用Callable:接口和Future接口方式实现

多线程的第三种实现方式:

特点:可以获取到多线程运行的结果

1.创建一个类MyCallable实现callable接口

2.重写call(是有返回值的,表示多线程运行的结果)

3. 创建MyCallable的对象(表示多线程要执行的任务)

4. 创建FutureTask的对象(作用管理多线程运行的结果)

5. 创建Thread类的对象,并启动(表示线程)

多线程三种实现方式对比:

多线程的常用成员方法:

1.String getName() 返回此线程的名称

void setName(String name) 设置线程的名字(构造方法也可以设置名字)

细节:

如果我们没有给线程设置名字,线程也是有默认的名字的

格式:Thread-X(X序号,从0开始的)

  • 默认的名字

  • setName方法设置名字

  • 构造方法设置名字

2.static Thread currentThread() 获取当前线程的对象

细节:

当JVM虚拟机启动之后,会自动的启动多条线程

其中有一条线程就叫做main线程

他的作用就是去调用main方法,并执行里面的代码

在以前,我们写的所有的代码,其实都是运行在main线程当中

3.static void sleep(long time) 让线程休眠指定的时间,单位为毫秒

细节:

1、哪条线程执行到这个方法,那么哪条线程就会在这里停留对应的时间

2、方法的参数:就表示睡眠的时间,单位毫秒

1秒=1000毫秒

3、当时间到了之后,线程会自动的醒来,继续执行下面的其他代码

线程的优先级:

setPriority(int newPriority) 设置线程的优先级

优先级越高先执行完的概率越高,抢占cpu的概率也越高

final int getPriority() 获取线程的优先级

优先级从高到底是10到1如果没有设置优先级默认是5

设置守护线程:

final void setDaemon(boolean on) 设置为守护线程

注意:当非守护线程执行完毕,守护线程也会跟着取消执行。

出让/礼让线程:

public static void yield() 出让线程/礼让线程

这个方法是尽可能的使线程出现的均匀些。

插入\插队线程:

public final void join() 插入线程/插队线程

相关文章:

  • Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据
  • Python常见面试题的详解24
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-train.py
  • 多组织业务流程中提示从价目表被终止
  • 打破关节动力桎梏!杭州宇树科技如何用“一体化设计”重塑四足机器人性能?
  • Android构建系统 - 06 添加编译模块
  • 记一次命令行启动springboot项目的问题 java -jar的问题
  • docker安装RabbitMq
  • 【力扣】2626. 数组归约运算——认识循环
  • WebSocket相关技术
  • 关系型数据库的技术思路
  • 代码随想录第16天|找树左下角的值、 路径总和
  • 嵌入式八股,Linux驱动三大基础类
  • Hive面试:行列转换
  • HTML/CSS/JS
  • XFeat:轻量级的深度学习图像特征匹配
  • leetcode 912. 排序数组
  • 【Eureka 缓存机制】
  • 【大模型+知识图谱】大模型与知识图谱融合:技术演进、实践应用与未来挑战
  • ue5 3dcesium中从本地配置文件读取路3dtilles的路径
  • 无人机企业从科技园区搬到乡村后,村子里变得不一样了
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 中共中央、国务院印发《党政机关厉行节约反对浪费条例》
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与明代造船工艺间
  • 2025年上海科技节开幕,人形机器人首次登上科学红毯
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教