
java并发编程
Java之根基,Java程序员必学
郑能量TuT
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发:CopyOnWriteArrayList实现原理及源码分析
CopyOnWriteArrayList实现原理及源码分析CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为”写时复制器”,Java并发包中类似的容器还有CopyOnWriteSet。本文会对CopyOnWriteArrayList的...转载 2020-05-07 17:00:57 · 242 阅读 · 0 评论 -
Java并发:ConcurrentHashMap解读
Java7 基于分段锁的ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解...转载 2020-05-07 16:49:08 · 386 阅读 · 0 评论 -
Java并发:BlockingQueue解读
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Qu...转载 2020-05-07 11:56:57 · 188 阅读 · 0 评论 -
Java并发:AtomicInteger源码分析——基于CAS的乐观锁实现
悲观锁与乐观锁我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来。在某个资源不可用的时候,就将c...转载 2020-04-26 12:34:56 · 179 阅读 · 0 评论 -
Java并发编程:线程封闭和ThreadLocal详解
一、什么是线程封闭当访问共享变量时,往往需要加锁来保证数据同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程中访问数据,就不需要同步了。这种技术称为线程封闭。在Java语言中,提供了一些类库和机制来维护线程的封闭性,例如局部变量和ThreadLocal类,本文主要深入讲解如何使用ThreadLocal类来保证线程封闭。二、理解ThreadLocal类ThreadLocal类能使线程中...转载 2020-03-23 11:57:38 · 191 阅读 · 0 评论 -
Java并发编程:JMM和volatile关键字
一、Java内存模型 随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内置高速缓存区。高速缓存区的加入使得CPU在运算的过程中直接从高速缓存区读取数据,在一定程度上解决了性能的问题。但也引起了另外一个问题,在CPU多核的情况下,每个处理器都有自己的缓存区,数据如何保持一致性。为了保证多核处理器的数据一...转载 2020-03-23 11:38:24 · 5378 阅读 · 0 评论 -
java 线程池、信号量
当我们需要执行一个异步任务时,通常会创建一个线程并启动它,通常任务执行完,线程会被回收,这的确很方便。但我们有大量的任务需要去执行,高并发的情况下,我们都需要不断的创建线程,创建线程和执行线程任务时非常耗费系统资源的,所以我们需要使用线程池,线程池很好的避免了这种情况,并且能很好的控制线程的执行。java中的主要是ThreadPoolExecutor这个类,具体的可以参考下...转载 2020-03-23 11:18:28 · 716 阅读 · 0 评论 -
Java并发编程:线程池的使用
在前面,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲...转载 2020-03-21 17:38:14 · 17335 阅读 · 0 评论