随笔分类 -  Java 并发编程

摘要:概述 ThreadLocal 意为本地线程变量,即该变量只属于当前线程,对其他线程隔离 我们知道,一个普通变量如果被多线程访问会存在存在线程安全问题,这时我们可以使用 Synchronize 来保证该变量某一时刻只能有一个线程访问,从而解决并发安全问题 但如果这个变量并不需要被共享,那么就可以使用 阅读全文
posted @ 2023-12-12 11:31 低吟不作语 阅读(299) 评论(0) 推荐(0) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 模式概述 在线程的世界里,生产者就是生产数据的线程,消费者就是消费数据的数据。生产者和消费者彼此之间不直接通信,而是通过阻塞队列进行通信,所以生产者生产完数据后不用等待消费者处理,而是直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列取,阻塞队列相 阅读全文
posted @ 2021-04-05 11:17 低吟不作语 阅读(306) 评论(0) 推荐(0) 编辑
摘要:两级调度模型 在 HotSpot VM 的线程模型中,Java 线程被一对一映射为本地操作系统线程。在上层,Java 多线程程序通常应用分解成若干个任务,然后使用用户级的调度器(Executor)将这些任务映射为固定数量的线程;在底层,操作系统内核将这些线程映射到硬件处理器。这种两级调度模型的示意图 阅读全文
posted @ 2021-04-04 09:48 低吟不作语 阅读(496) 评论(0) 推荐(1) 编辑
摘要:概述 Java 中的线程池是运行场景最多的并发框架,合理使用线程池能够带来三个好处: 降低资源消耗。通过重复利用已有的线程降低线程创建和销毁造成的消耗 提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行 提高线程可管理性。线程是稀缺资源,使用线程池进行统一分配、调优和监控,可以降低资 阅读全文
posted @ 2021-03-31 22:28 低吟不作语 阅读(1218) 评论(1) 推荐(2) 编辑
摘要:CountDownLatch CountDownLatch 允许一个或多个线程等待其他线程完成操作。假设现有一个需求:我们需要解析一个 Excel 里多个 sheet 的数据,此时可以考虑使用多线程,每个线程解析一个 sheet 的数据,等到所有的 sheet 都解析完之后,程序需要提示解析完成。在 阅读全文
posted @ 2021-03-28 13:56 低吟不作语 阅读(960) 评论(2) 推荐(2) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 Fork/Join 框架概述 Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是把一个大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架,其运行流程如图所示: 工作窃取算法 工作窃取算法是指某个线程从其他队列里窃 阅读全文
posted @ 2021-03-27 00:02 低吟不作语 阅读(236) 评论(0) 推荐(0) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 阻塞队列概述 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列,这两个附加的操作支持阻塞的插入和移除方法: 支持阻塞的插入方法:意思是当队列为满时,队列会阻塞插入元素的线程,直到队列不为满 支持阻塞的移除方法:意思是当队列为空时,获取元素的 阅读全文
posted @ 2021-03-26 00:09 低吟不作语 阅读(400) 评论(0) 推荐(0) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 概述 任意一个 Java 对象,都拥有一个监视器方法,主要包括 wait()、wait(long timeout)、notify() 以及 notifyAll() 方法,这些方法与 synchronized 同步关键字配合,可以实现等待 - 通知模式。Con 阅读全文
posted @ 2021-03-13 13:36 低吟不作语 阅读(363) 评论(0) 推荐(1) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 重入锁 重入锁 ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁还支持获取锁时的公平和非公平性选择 所谓不支持重进入,可以考虑如下场景:当一个线程调用 lock() 方法获取锁之后,如果再次 阅读全文
posted @ 2021-03-10 22:46 低吟不作语 阅读(306) 评论(0) 推荐(0) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 概述 队列同步器 AbstractQueuedSynchronize(以下简称同步器),是用来构建锁(Lock)或者其他同步组件(JUC 并发包)的基础框架,它使用了一个 int 成员变量表示同步状态,通过内置的 FIFO 队列来完成资源获取线程的排队工作 阅读全文
posted @ 2021-03-01 22:56 低吟不作语 阅读(437) 评论(0) 推荐(0) 编辑
摘要:前面学习过等待 - 通知机制,现在我们在其基础上添加一个超时机制,模拟从连接池中获取、使用和释放连接的过程。客户端获取连接的过程被设定为等待超时模式,即如果在 1000 毫秒内无法获取到可用连接,将会返回给客户端一个 null。设定连接池的大小为 10 个,然后通过调节客户端的线程数来模拟无法获取连 阅读全文
posted @ 2021-02-25 00:16 低吟不作语 阅读(396) 评论(0) 推荐(0) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 管道输入 / 输出流 管道输入 / 输出流和普通的文件输入 / 输出流或者网络输入 / 输出流不同之处在于,它主要用于线程之间的数据传输,而传输媒介为内存 管道输入 / 输出流主要包括如下四种具体实现: PipedOutputStream、PipedInpu 阅读全文
posted @ 2021-02-22 09:42 低吟不作语 阅读(260) 评论(0) 推荐(0) 编辑
摘要:本文部分摘自《Java 并发编程的艺术》 volatile 和 synchronize 关键字 每个处于运行状态的线程,如果仅仅是孤立地运行,那么它产生的作用很小,如果多个线程能够相互配合完成工作,则将带来更大的价值 Java 支持多个线程同时访问一个对象或者对象的成员变量,使用 volatile 阅读全文
posted @ 2021-02-21 16:30 低吟不作语 阅读(1142) 评论(0) 推荐(1) 编辑
摘要:线程简介 1. 什么是线程? 现代操作系统在运行一个程序时,会为其创建一个进程,一个进程里可以创建多个线程。现代操作系统调度的最小单元是线程,也叫轻量级进程。这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能访问共享的内存变量。处理器在这些线程上高速切换,让使用者觉得这些线程在同时执行 2. 阅读全文
posted @ 2021-02-19 23:57 低吟不作语 阅读(463) 评论(0) 推荐(1) 编辑
摘要:本书部分摘自《Java 并发编程的艺术》 线程通信与同步 在并发编程中,有两个需要处理的关键问题: 线程之间如何通信 线程之间如何同步 通信指线程之间以何种机制来交换信息,通信机制有两种: 共享内存:通过读 - 写内存中的公共状态进行隐式通信 消息传递:线程之间没有公共状态,线程之间必须通过发送消息 阅读全文
posted @ 2021-02-17 16:57 低吟不作语 阅读(288) 评论(0) 推荐(1) 编辑
摘要:概述 我们知道 volatile 关键字可以保证共享变量的可见性和有序性,但不能保证原子性,要想同时满足三者,可以使用 synchronized 关键字 synchronized 是对象锁,也就是说它锁的是一个对象,适用的对象具体表现为以下三种形式: 对于普通同步方法,锁的是当前实例对象 publi 阅读全文
posted @ 2021-02-13 14:30 低吟不作语 阅读(473) 评论(1) 推荐(0) 编辑
摘要:引言 在学习并发以前,我们习惯用一种简单的顺序叙事方式编程,首先是第一件事,然后是第二件事,第三件 ...... 总之,我们完全掌握着事情的发展。现在,我们来到了陌生的并发世界,你会发现原本值得信赖的事物突然变得不可靠了,比如将一个值设为 5,回头一看又变成 47 了,这就很匪夷所思了。并发就好似使 阅读全文
posted @ 2021-01-02 19:27 低吟不作语 阅读(239) 评论(0) 推荐(0) 编辑
摘要:乐观锁 一般而言,在并发情况下我们必须通过一定的手段来保证数据的准确性,如果没有做好并发控制,就可能导致脏读、幻读和不可重复度等一系列问题。乐观锁是人们为了应付并发问题而提出的一种思想,具体的实现则有多种方式。 乐观锁假设数据一般情况下不会造成冲突,只在数据进行提交更新时,才会正式对数据的冲突与否进 阅读全文
posted @ 2020-10-23 16:10 低吟不作语 阅读(495) 评论(0) 推荐(2) 编辑
摘要:概述 volatile 是 Java 提供的一种轻量级的同步机制。相比于传统的 synchronize,虽然 volatile 能实现的同步性要差一些,但开销更低,因为它不会引起频繁的线程上下文切换和调度。 为了更好的理解 volatile 的作用,首先要了解一下 Java 内存模型与并发编程三要素 阅读全文
posted @ 2020-10-17 13:56 低吟不作语 阅读(625) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示