
JavaEE多线程
文章平均质量分 91
学习JavaEE多线程
Hsu琛君珩
去更远的地方,见更亮的光~
展开
-
【JavaEE多线程】Java 文件操作
修饰符及类型属性说明依赖于系统的路径分隔符,String 类型的表示依赖于系统的路径分隔符,char 类型的表示构造方法签名说明利用 File 构造文件输入流利用文件路径构造文件输入流//Reader使用// FileReader 构造方法, 可以填写一个文件路径(绝对路径/相对路径都行), 也可以填写一个构造好的 File 对象// try {// // 中间的代码无论出现啥情况, close 都能保证执行到.原创 2024-04-20 00:09:46 · 942 阅读 · 0 评论 -
【JavaEE多线程】深入解析Java并发工具类与应用实践
Callable 通常需要搭配 FutureTask 来使用. FutureTask 用来保存 Callable 的返回结果. 因为Callable 往往是在另一个线程中执行的, 啥时候执行完并不确定.Callable 和 Runnable 相对, 都是描述一个 “任务”. Callable 描述的是带有返回值的任务, Runnable 描述的是不带返回值的任务.线程池就是为了解决这个问题。信号量, 用来表示 “可用资源的个数”. 本质上就是一个计数器,描述的是当前这个线程,是否“有临界资源可以用”原创 2024-04-19 00:07:16 · 1087 阅读 · 0 评论 -
【JavaEE多线程】深入理解CAS操作:无锁编程的核心
CAS:全称Compare and swap,字面意思:”比较并交换“,能够比较和交换某个寄存器中的值和内存中的值是否相等,如果相等,则把另一个寄存器中的值和内存进行交换。一个 CAS 涉及到以下操作:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较 A 与 V 是否相等。(比较)如果比较相等,将 B 写入 V。(交换)返回操作是否成功。CAS伪代码下面写的代码不是原子的, 真实的 CAS 是一个原子的硬件指令完成的. 这个伪代码只是辅助理解CAS 的工作流程.原创 2024-04-18 00:10:32 · 945 阅读 · 0 评论 -
【JavaEE多线程】掌握锁策略与预防死锁
偏向锁在没有其他人竞争的时候,就仅仅是一个简单的标记(非常轻量),一旦有别的线程尝试进行加锁,就会立即把偏向锁,升级 成真正的加锁状态,让别人只能阻塞等待。挂起等待锁是重量级锁的一种典型实现,通过内核态,借助系统提供的锁机制,当出现锁冲突的时候,会牵扯到内核对于线程的调度,使冲突的线程出现挂起(阻塞等待)请求和保持,一个线程去尝试获取多把锁,在获取第二把锁的过程中,会保持对第一把锁的获取状态。锁粗化:关于:“锁的粒度”,如果加锁操作里包含的实际要执行的代码越多,就认为锁的粒度越大。原创 2024-04-17 00:07:27 · 899 阅读 · 0 评论 -
【JavaEE多线程】从单例模式到线程池的深入探索
使用没有共享资源的模型适用共享资源只读,不写的模型不需要写共享资源的模型使用不可变对象直面线程安全(重点)保证原子性保证顺序性保证可见性。原创 2024-04-16 00:07:38 · 1078 阅读 · 0 评论 -
【JavaEE多线程】线程安全、锁机制及线程间通信
按照之前对于锁的设定, 第二次加锁的时候, 就会阻塞等待. 直到第一次的锁被释放, 才能获取到第二个锁. 但是释放第一个锁也是由该线程来完成, 结果这个线程已经躺平了, 啥都不想干了, 也就无法进行解锁操作. 这时候就会。针对每一把锁, 操作系统内部都维护了一个等待队列. 当这个锁被某个线程占有的时候, 其他线程尝试进行加锁, 就加不上了, 就会阻塞等待, 一直等到之前的线程解锁之后, 由操作系统唤醒一个新的线程, 再来获取到这个锁.我们把一段代码想象成一个房间,每个线程就是要进入这个房间的人。原创 2024-04-15 00:35:22 · 797 阅读 · 0 评论 -
【JavaEE多线程】理解和管理线程生命周期
用我们上面的例子来看,每个执行流,也需要有一个对象来描述,类似下图所示,而 Thread 类的对象就是用来描述一个线程执行流的,JVM 会将这些 Thread 对象组织起来,用于线程调度,线程管理。优先级(getPriority):设置/获取线程优先级作用不是很大,线程的调度主要还是系统内核来负责的,系统调度的速度实在太快。ID(getId):线程的身份表示(在JVM这里给线程设定的身份标识),一个线程可以有多个身份标识。是否存活(isAlive):Thread对象,对应的线程(系统内核中)是否存活。原创 2024-04-14 00:28:25 · 2067 阅读 · 0 评论 -
【JavaEE多线程】线程的基础知识及线程与进程的联系
其实一个进程至少包含一个线程,最初创建出来的这个可以认为是一个只包含一个线程的进程(此时创建的过程需要分配资源,此时第一个线程的创建开销可能是比较大的)线程是更轻量的,但也不是没有创建成本。一个进程可以包含一个或多个线程,这个进程中的多个线程共同复用了进程中各种资源(内存、硬盘),但这些线程各自独立在CPU上进行调度。系统在进行多个线程调度的时候,并没有一个非常明确的的顺序,而是按照这种“随机”的方式进行调度,这样的“随机”调度的过程,称为“,后续创建的线程,让线程在进程内部(进程和线程之间的关系,原创 2023-10-30 23:32:03 · 146 阅读 · 4 评论 -
【JavaEE多线程】进程的基础知识及进程调度的过程
这就和硬盘资源有关了,硬盘是硬件,应用程序一般是没法直接接触到“硬件”这一层的,实际上是操作系统抽象成“文件”这样的概念,程序操作的是文件,文件实际上是存储在硬盘上的。每个进程就会有一个“文件描述符表”来记录,当前这个进程正在使用哪些文件,操作系统打开一个文件,就会产生一个“文件描述符”(就像文件的身份标识一样,当然,只在进程内部产生),同时会使用文件描述符(类似于数组),把文件描述符给组织起来。组织:会使用一系列的数据结构,把多个进程进行一个有效的组织,随时方便进行遍历,查找,汇总数据……原创 2023-10-29 11:45:43 · 154 阅读 · 4 评论