Java笔记 --- 七、多线程

七、多线程

线程

  • 线程是操作系统能够运行调度的最小单位

  • 被包含在进程之中,是进程的实际运行单位

  • 应用软件中相互独立,可以同时运行的功能

  • 每一个线程都有自己的栈

并发和并行

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

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

多线程的实现方式

继承Thread类

  1. 定义一个类继承Thread

  2. 重写run方法

  3. 创建类的对象,调用start()方法开启线程

实现Runnable接口

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

  2. 重写run方法

  3. 创建类的对象

  4. 创建一个Thread类的对象(形参是自己创建类的对象),开启线程

  • run方法里面可以获取当前线程的对象

  • Thread t = Thread.currentThread();

利用Callable接口和Future接口

  • 实现接口时的泛型代表运行结果的类型

成员方法

  • 线程的默认名字 Thread-X(X序号,从0开始)

  • 抢占式调度(随机)多个线程抢占CPU的执行权和时间

  • 优先级 1~10 默认5

  • 不是立马结束,陆续结束

线程的生命周期

同步代码块

  • 锁对象是唯一的

    1. static Object obj = new Object();

    2. 用当前类的字节码文件对象 MyThread.class

同步方法

Lock锁

死锁

  • 是一个错误,线程A和线程B分别用两把锁,程序卡死

  • 互相都等另一个线程的锁释放

等待唤醒机制

  • 生产者和消费者

  • 轮流执行

image-20240206164226008

阻塞队列

  • 在main方法中创建实现类

  • 在对应的线程类中需要在成员变量写对应的 ArrayBlockingQueue<String> queue;

  • 并在构造方法中也实现

  • queue对应的方法有

  1. put

  2. take

线程的状态

  • 没有运行状态

线程池

image-20240206193446533

自定义线程池

最大并行数

  • 4核8线程

  • 8就是最大并行数

CPU密集型运算

  • 计算比较多

    • 线程池数量=最大并行数+1

I/O密集型运算

  • 读取本地文件和数据库

  • thread dump工具可以计算时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456968.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)

今天也是去学习了一波字符串函数&#xff0c;想着也为了加深记忆&#xff0c;所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…

数据结构·复杂度讲解

1. 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 数据结构是用来在内存中管理数据的&#xff0c;类似的&#xff0c;我们熟悉的文件或数据库是在硬盘中管理数据的。内存中的数据是带点…

【k8s系列】(202402) 证书apiserver_client_certificate_expiration_seconds

apiserver_client_certificate_expiration_second证书定义的位置&#xff1a;kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go at 244fbf94fd736e94071a77a8b7c91d81163249d4 kubernetes/kubernetes (github.com) apiserver_client_certi…

机器学习逻辑回归模型训练与超参数调优 ##3

文章目录 [TOC]基于Kaggle电信用户流失案例数据&#xff08;可在官网进行下载&#xff09;逻辑回归模型训练逻辑回归的超参数调优 基于Kaggle电信用户流失案例数据&#xff08;可在官网进行下载&#xff09; 数据预处理部分可见&#xff1a; 机器学习数据预处理方法&#xff0…

【Linux系统化学习】自定义简易shell

目录 环境变量在进程替换中的继承 在当前进程中添加环境变量 putenv函数 环境变量被继承的原因 使用ecexle传递环境变量 传递自己的环境变量表 自定义简易的shell 获取主机、使用者、工作目录 获取命令 切割分解命令 创建子进程执行命令 内建命令的特殊处理 完整代…

AI改编游戏大电影《使命召唤:幽灵重生》(下)

AI改编游戏大电影《使命召唤&#xff1a;幽灵重生》&#xff08;下&#xff09; 幽灵重生携生化武器毁灭人类&#xff0c;普莱斯上尉点上雪茄拿起武器&#xff0c;英雄再次迎来使命的召唤&#xff01; 《使命召唤&#xff1a;幽灵重生》&#xff08;下&#xff09;&#xff1a…

6.s081 学习实验记录(五)traps

文章目录 一、RISC-V assembly简介问题 二、Backtrace简介注意实验代码实验结果 三、Alarm简介注意实验代码实验结果 一、RISC-V assembly 简介 git checkout traps&#xff0c;切换到traps分支user/call.c 文件在我们输入 make fs.img 之后会被汇编为 call.asm 文件&#xf…

【VTKExamples::PolyData】第二十一期 ImplicitPolyDataDistance

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例ImplicitPolyDataDistance,并解析接口vtkImplicitPolyDataDistance,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)…

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1&#xff1a;自定义带有ik的es镜像 先看下目录结构&#xff1a; /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

Docker进阶篇-compose容器编排

一、描述 Docker-Compose是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Compose是Docker公司推出的一个工具软件&#xff0c;可以管理多个Docker容器组成一个应用。需要定义 一个YAML格式的配置文件docker-compose.yml&#xff0c;配置好多个容器…

【iOS ARKit】人形遮挡

人形遮挡简介 在 AR系统中&#xff0c;计算机通过对设备摄像头采集的图像进行视觉处理和组织&#xff0c;建立起实景空间&#xff0c;然后将生成的虚拟对象依据几何一致性原理嵌入到实景空间中&#xff0c;形成虚实融合的增强现实环境&#xff0c;再输出到显示系统中呈现给使用…

微信支付服务商,商户快速进件,减少工作量

大家好&#xff0c;我是小悟 服务商拓展特约商户&#xff0c;人工录入大量商户资料&#xff0c;耗时耗力。商户对标准费率不满意&#xff0c;无法说服商户先签约再帮其调整费率。 为了减少服务商工作量&#xff0c;服务商快速进件工具来了&#xff0c;分为移动端和管理端。用好…