Java—初始多线程

server/2025/3/4 10:21:55/

多线程的理解

进程:

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

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

线程:

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

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

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

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

总结:

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() 插入线程/插队线程


http://www.ppmy.cn/server/172306.html

相关文章

npm ERR! code 128 npm ERR! An unknown git error occurred

【问题描述】 【问题解决】 管理员运行cmd(右键window --> 选择终端管理员) 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因,这里执行npm install --registryhttps:…

realsenseD455相机录制bag转为TUM数据集

本文参考 文章https://blog.csdn.net/m0_60355964/article/details/129518283?ops_request_misc%257B%2522request%255Fid%2522%253A%252211559cdf09f5ff02d4b1d97f2b0744ee%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id11559cdf09f5ff02d…

贪心算法精品题

1.找钱问题 本题的贪心策略在于我们希望就可能的保留作用大的5元 class Solution { public:bool lemonadeChange(vector<int>& bills) {std::map<int ,int> _map;for(auto ch:bills){if(ch 5) _map[ch];else if(ch 10){if(_map[5] 0) return false;else{_m…

计算机毕业设计SpringBoot+Vue.js手机商城 (源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

深度解析Ant Design Pro 6开发实践

深度解析Ant Design Pro 6全栈开发实践&#xff1a;从架构设计到企业级应用落地 一、Ant Design Pro 6核心特性与生态定位&#xff08;技术架构分析&#xff09; 作为Ant Design生态体系的旗舰级企业应用中台框架&#xff0c;Ant Design Pro 6基于以下技术栈实现突破性升级&am…

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…

【ATXServer2】Android无法正确显示手机屏幕

文章目录 现象原因分析与解决排查手机内部minicap 解决minicap问题查看移动端Android SDK版本查看minicap支持版本单次方案多次方案 现象 原因分析与解决 由于atxserver2在与Android动终端的链接过程中使用了agent&#xff1a;atxserver2-android-provider&#xff0c;按照项目…

11.字符函数和字符串函数

字符函数 11.1求字符串长度strlenstrlen模拟 11.2长度不受限制的字符串函数strcpy 11.1求字符串长度 strlen Get the length of a string. size_t strlen( const char *string );typedef unsigned int size_t; strlen 返回值为 unsigned int strlen返回字符串中 \0 前面出现的…