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

Java|学习|多线程

1.多线程的一些概念

进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源。
线程:是进程中的单个顺序控制流,是一条执行路径。
单线程:一个进程如果只有一条执行路径,则称为单线程程序。
多线程:一个进程如果有多条执行路径,则称为多线程程序。
并行:多个任务同一时刻进行。
并发:多个任务同一时间间隔内进行,在一段时间内能够执行多个任务,但是这其中的某个时刻只能执行一个任务。

2.多线程的创建和启用

多线程的创建方式:继承和实现。
1.继承 Thread 类,覆写 run 方法。
2.实现 Runnable 接口,覆写 run 方法。

创建线程对象时线程对象是 Thread 类或其子类,可以使用多态。
启动线程需要调用线程对象的 start 方法,而不是直接使用 run 方法。直接调用 run 方法时,只是调用 run 方法,并没有启动线程。

3.多线程的优先级和命名

优先级设置需要放在线程启动之前。优先级用 1~10 来表示,数字越大,优先级越高。
优先级在资源紧张的时候才能体现出来。
相同优先级可使用 yield 方法来让出 CPU 的执行权,但是要用在一个线程拥有时间片但是另一个相同优先级的线程没有拿到时间片的情况下。

Thread.currentThread(); 获取当前线程对象,可以用来获取 main 中的主线程等。
主线程名为 main, 其他线程名为 Thread-1,Thread-2,… 以此类推。

4.多线程的生命周期

生命周期:
线程的生命周期

阻塞状态结束后回到就绪状态,重新排队。
stop 可能会导致死锁,一般使用标识符终止线程,比如用成员变量 flag 控制何时需要结束进程。

5.多线程的合并

可以使用 join 方法实现线程合并,调用 join 方法的对象先执行线程,在哪个线程里有对象调用 join, 那么这个线程就要等到调用 join 的线程执行结束才可以继续执行。

6.Synchronized

synchronized 使用范围:成员方法,静态方法,语句块。
当某个线程访问某个对象中加了 synchronized 修饰的成员方法时,该对象中所有被 synchronized 修饰的成员方法都被锁定。静态方法同理。
给静态方法加锁是类锁,给成员方法加锁是对象锁。静态锁只影响静态,成员锁影响成员。对象之间互不影响。
可以使用 synchronized 语句块,只锁住部分代码,不用将整个方法都锁住。

7.Lock

为了更清晰的表达如何加锁和释放锁,JDK5 以后提供了一个新的锁对象 Lock 。
Lock 可以获得更广泛的锁定操作。
void lock():获得锁。
void unlock():释放锁。
Lock是接口,可以采用实现类ReentrantLock等实例化。
类 ReentrantLock 有一个无参构造方法:Lock lock = new ReentrantLock();。

8.生产者-消费者(10-26补充)

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤

http://www.lryc.cn/news/205753.html

相关文章:

  • 【Python机器学习】零基础掌握VotingClassifier集成学习
  • 深入了解JavaScript中的AJAX和HTTP请求
  • 第87步 时间序列建模实战:LSTM回归建模
  • GB/T28181协议介绍
  • 光致发光荧光量子检测的作用
  • 深度学习第四课
  • Linux创建临时文件mkstemp()tmpfile()
  • js的节流和防抖详解
  • 基于SpringBoot的水果销售网站
  • vue2进阶学习知识汇总
  • SQL SERVER连接oracle数据库几种方法
  • 存储优化知识复习三详细版解析
  • HotReload for unity支持的代码修改
  • 写一个呼吸灯要几行代码?
  • Banana Pi BPI-W3(Armsom W3)RK3588开当板之调试UART
  • LeetCode88——合并两个有序数组
  • C++ BinarySercahTree recursion version
  • 兑换码生成与解析-个人笔记(java)
  • 2023/10/25MySQL学习
  • 网络协议--Ping程序
  • 如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序
  • JAVA排序
  • opencalib中lidar2camera安装记录
  • 整个自动驾驶小车001:概述
  • windows本地搭建mmlspark分布式机器平台流程
  • 深入探究 Next.js 中的 getServerSideProps 和 getStaticProps 用法及区别
  • 餐饮业如何高效经营?赶紧闭眼抄这个方法!
  • 餐饮外卖小程序商城的作用是什么
  • nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植
  • 电厂数据可视化三维大屏展示平台加强企业安全防范