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

Java的线程的使用

一.两种创建线程的方式

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.lryc.cn/news/353611.html

相关文章:

  • 行为型模式 (Python版)
  • vscode:如何解决”检测到include错误,请更新includePath“
  • 区块链会议投稿资讯CCF A--USENIX Security 2025 截止9.4、1.22 附录用率
  • vue实现可拖拽移动悬浮球
  • 立体库堆垛机的精密构造与功能(收藏版)
  • 算法提高之你能回答这些问题吗
  • C++-指针
  • Three.js 研究:2、如何让动画线性运动
  • z3-加法器实验
  • 解决git克隆项目出现fatal无法访问git clone https://github.com/lvgl/lvgl.git
  • Vue中引入组件需要哪三步
  • 到底该用英文括号还是中文括号?
  • 一个普通双非女生的秋招之路
  • 一个模型用了几层神经网络怎么算?
  • python获取cookie的方式
  • Nginx-狂神说
  • Python筑基之旅-运算符
  • 【Text2SQL】Spider 数据集
  • 语雀——云知识库/笔记
  • Java学习:电影查询简单系统
  • 在Mac电脑下怎么部署QAnything?
  • 单条16g和双条8g哪个好
  • Microsoft VBA Excel 去重小工具
  • 数据库管理-第194期 网络加速RDMA初探(20240526)
  • C++小游戏 合集
  • 【Python爬虫篇】Selenium在获取网页数据方面的使用及采集中国大学课程评论数据
  • 【JavaScript】文件下载
  • 利用Python去除PDF水印
  • Unity Assembly Definition Dotween 引用
  • 重开之数据结构(二刷)