Java的线程的使用

news2024/9/22 9:35:18

一.两种创建线程的方式

1.继承Thread类(匿名内部类)

创建方式:

1.定义一个子类继承Thread,重写run方法

2.创建子类对象,

3.调用子类对象的start方法(启动还是执行的run方法)

优缺点:

1.编码简单

2.只能继承Thread,无法继承其他类,不利于功能扩展

2.实现Runnable接口

创建方式:

1.定义一个任务类实现Runnable接口,重写run()方法

2.创建任务类对象

3.把任务类对象交给Thread来处理

4.调用线程对象的start执行

优缺点:

1.可以继承其他类 实现其他接口,扩展性强

2.需要Thread还需要多一个Runnable对象

3.匿名内部类

二.线程和进程的区别

1.定义:

线程和进程是操作系统中进行任务管理和资源分配的基本单元,

  • 进程(Process):是程序的一次执行实例,是资源分配的基本单位。每个进程都有独立的地址空间、数据段、代码段和堆栈段。
  • 线程(Thread):是进程中的一个执行单元,是CPU调度和执行的基本单位。一个进程可以包含多个线程,它们共享进程的资源(如内存、文件句柄等)。

2.区别:

1.一个进程可以包含多个线程,线程在进程的内部。

2.进程之间的资源是独立的,线程之间的资源则是共享的。

每个进程都有独立的虚拟地址空间,也有之间独立的文件描述符表,同一进程的多个线程之间则共用这一份虚拟地址空间和文件描述符表。

3.进程是操作系统中资源分配的基本单位,线程是操作系统中调度执行的基本单位。

4.多个进程同时执行时,如果一个进程崩溃,一般不会影响其他进程,而同一进程内的多个线程之间,如果一个线程崩溃,很可能使得整个进程崩溃。

5.进程的上下文切换速度比较慢,而线程的上下文切换速度比较快。

6.进程的创建/销毁/调度开销大,线程的创建/销毁/调度开销相对少很多。

三.synchronized

1.定义:

synchronized 是 Java 中的关键字,是一种同步锁。主要应用于多线程环境下保证线程的安全性。

2.用法:

1.修饰代码块:

被修饰的代码块称为同步语句块,其作用的范围是大括号{} 括起来的代码,作用的对象是调用这个代码块的对象;

2.修饰方法:

被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;

虽然可以使用 synchronized 来定义方法,但 synchronized 并不属于方法定义的一部分,因此,synchronized 关键字不能被继承。如果在父类中的某个方 法使用了 synchronized 关键字,而在子类中覆盖了这个方法,在子类中的这 个方法默认情况下并不是同步的,而必须显式地在子类的这个方法中加上 synchronized 关键字才可以。当然,还可以在子类方法中调用父类中相应的方 法,这样虽然子类中的方法不是同步的,但子类调用了父类的同步方法,因此, 子类的方法也就相当于同步了。

3.修饰静态方法:

其作用的范围是整个静态方法,作用的对象是这个类的 所有对象;

4.修饰一个类

其作用的范围是synchronized后面括号括起来的部分,作用对象是这个类的所有对象。

四.锁

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小猪APP分发:一站式免费应用推广解决方案

在竞争激烈的移动应用市场中,寻找一个高效且成本友好的方式来推广自己的应用程序,成为了众多开发者面临的共同挑战。幸运的是,像"小猪APP分发www.appzhu.cn"这样的平台应运而生,为开发者提供了一个全面、免费的应用分发…

论文精读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微软亚洲研究院(Microsoft Research Asia), 浙江…

NLP(19)--大模型发展(3)

前言 仅记录学习过程,有问题欢迎讨论 大模型训练相关知识: 问题: 数据集过大,快速训练模型过大,gpu跑不完 方案: 数据并行训练: 复制数据(batch_size)到多个gpu&…

机器学习实验------Adaboost算法

第1关:什么是集成学习 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 第2关: Boosting 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 第3关:Adaboost算法流程 任务描述 …

C++学习/复习4--与类相关的概念/默认成员函数/运算符重载/Date类实现案例

一、类和对象 1.本章概要 2.C中的结构体(struct与class) 升级为类 (1)类及成员函数的两种定义方式 声明与定义分离 (2)权限 注意1:struct/class在权限上的区别 (3)封装 (4&#x…

连公司WiFi后,无法访问外网,怎么回事,如何解决?

文章目录 封面问题描述问题探究什么是DNS?分布式,层次数据库如何理解分布式?如何理解层次? 本地DNS服务器迭代查询,递归查询DNS缓存参考资料 封面 问题描述 从甲方项目组返回公司后,我习惯性连上公司WiFi&…

50 http通用服务器

虽然我们说,应用层协议是我们程序猿自己定的 但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用,http(超文本传输协议)就是其中之一 目录 认识urlurlencode和…

数据库(5)——DDL 表操作

表查询 先要进入到某一个数据库中才可使用这些指令。 SHOW TABLES; 可查询当前数据库中所有的表。 表创建 CREATE TABLE 表名( 字段1 类型 [COMMENT 字段1注释] ...... 字段n 类型 [COMMENT 字段n注释] )[COMMENT 表注释]; 例如,在student数据库里创建一张studen…

LeetCode热题100——矩阵

73.矩阵清零 题目 给定一个 *m* x *n* 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 示例…

记.netcore部署到银河麒麟linux服务器过程详解

一.服务器配置 操作系统:银河麒麟桌面操作系统V10 CPU:intel i5 内存:16G 内核:5.10.0.8-generic 未激活 二.运行环境安装 .netcore 6.0 runtime时安装下载离线包 Download .NET 6.0 (Linux, macOS, and Windows) -下载完后进行解压 sudo su #提权 mkdir -p $HOME/…

救援运输车3D三维虚拟展馆能分享给更多潜在买家

随着消费趋势的演进,个性化和附加服务需求日益凸显。加上疫情等因素影响下,一场创新的革命正在悄然兴起——3D沉浸式看车。 3D沉浸式看车,重新定义购车体验 不再受限于地理位置和时间,3D沉浸式看车是利用web3d开发建模技术将真实比…

C# 机构仿真实例

1、实现连杆带动滑块运动 一个连杆旋转带动另一个连杆,另一个连杆拖动滑块,点击“开始”按钮开始运动,再点击按钮,则停止运动。 2、实现程序 #region 机构仿真Image image null;Timer timer new Timer();int width 0;int heig…

一个机器学习问题的重新定义

任何事物都有两面性。 一些机器学习问题也是如此。并非每个回归问题(你认为的)都需要回归。仔细考虑和审视问题的业务不仅可以帮助开发更好的模型,还可以找到有效的解决方案。 重构或重新定义(reframing)是一种改变机…

【rust工具链】

1 查看正在使用的工具链 命令:rustup show 结果显示: 从图中可以看到正在使用的是rustc 1.76.0版本,也可以看到已安装的所有版本的工具链 2 使用默认工具链 命令:rustup default 版本号 例如:rustup default 1.58…

Python数据分析实验四:数据分析综合应用开发

目录 一、实验目的与要求二、主要实验过程1、加载数据集2、数据预处理3、划分数据集4、创建模型估计器5、模型拟合6、模型性能评估 三、主要程序清单和运行结果四、实验体会 一、实验目的与要求 1、目的: 综合运用所学知识,选取有实际背景的应用问题进行…

大模型中的Tokenizer

在使用GPT 、BERT模型输入词语常常会先进行tokenize 。 tokenize的目标是把输入的文本流,切分成一个个子串,每个子串相对有完整的语义,便于学习embedding表达和后续模型的使用。 一、粒度 三种粒度:word/subword/char word词&a…

人工智能+跨癌种分析,能否解决医学数据样本量小的问题?【医学AI|顶刊速递|05-26】

小罗碎碎念 先说明,目前小罗只是硕士,以下个人观点很有可能不准确,欢迎批评指正!!小罗虚心听取有益建议!! 众所周知,医学数据相比于其他领域的数据来说,属于小样本数据。…

Java----Maven详解

前言 Maven是Java项目的构建工具,通过项目对象模型(POM)管理项目配置信息,自动化构建、测试和部署过程。开发人员可定义项目结构、依赖和构建流程,提高开发效率和质量。本文介绍基本概念和用法,帮助您更好…

ros2编写pcl节点加载pcd文件

初次学习ros2和pcl,尝试在ros2中创建节点,加载pcd文件,并在rviz中进行可视化,记录一下整个过程。 编辑环境 ubuntu20.04 ros2_foxy 创建节点 mkdir -p proj_ws_pcl/src #创建工程文件夹 cd proj_ws_pcl/src #创建源码文件夹 …