软件开发与架构领域 -体系化知识分享

理清软件领域各种似是而非的概念,深刻理解本质

排序:
默认
按更新时间
按访问量

Java并发编程 -- 再论锁的问题 -- 无锁与锁优化

在前面JUC源码分析和Disruptor分析序列中,我们已经反复讨论了锁与无锁的问题。众所周知,在多线程程序中,锁是性能杀手。因此“锁优化”一直是多线程中被频繁探讨的一个问题。本文将从“锁优化”这个应用层面,把前面的诸多东西串起来,探讨一下锁优化的一系列策略。策略1:业务和设计层面 – 单线程或去...

2017-01-20 19:04:59

阅读数:1022

评论数:3

Java多线程 -- JUC包源码分析19 -- ForkJoinPool/ForkJoinTask

JDK 1.7 提供了一个并行计算的框架,本文就来分析一下它在使用和实现原理上,和ThreadPool有什么区别。何为Fork/Join?我们在大学算法课本上,学过的一种基本算法就是:分治。其基本思路就是:把一个大的任务分成若干个子任务,这些子任务分别计算,最后再Merge出最终结果。这个过程通常...

2016-09-12 23:10:17

阅读数:1734

评论数:0

Java多线程 -- JUC包源码分析18 -- ConcurrentSkipListMap(Set)/TreeMap(Set)/无锁链表

-为什么是SkipList,不是TreeMap的红黑树? -无锁链表的精髓 -ConcurrentSkipListMap -ConcurrentSkipListSet为什么是SkipList?大家都知道,在Java集合类中,有一个TreeMap,相对于HashMap,它的一个最大特点是:ke...

2016-09-11 22:33:26

阅读数:840

评论数:0

Java多线程 -- JUC包源码分析17 -- 弱一致性与无锁队列

–ConcurrentHashMap的弱一致性 –SynchronousQueue的弱一致性 –Exchanger的弱一致性 –Linux内核无锁队列的弱一致性 –总结经过前面一系列的源码分析,我们基本覆盖了JUC包的所有组件。在这诸多组件中,我们总是不断看到一个如影随行的东西:CAS。相...

2016-09-11 17:35:04

阅读数:969

评论数:0

Java多线程 -- JUC包源码分析16 -- Exchanger源码分析

上一篇所讲的SynchronousQueue,是2个线程之间单向的数据传输,一个put,一个take。 而今天所讲的Exchange,顾明思义,是双向的数据传输,2个线程在一个同步点,交换数据。其使用方式,大致如下:Exchange<String> exchange = new Ex...

2016-09-11 17:30:05

阅读数:1194

评论数:0

Java多线程 -- JUC包源码分析15 -- SynchronousQueue与CachedThreadPool

在前面分析工具类Executors的时候,提到了CachedThreadPool:其线程数会无限增大,每来一个新请求,就会new一个Thread,其maxPoolSize = Integer.MAX。 其构造函数如下:public static ExecutorService newCached...

2016-09-11 16:19:16

阅读数:1371

评论数:0

Java多线程 -- JUC包源码分析14 -- ScheduledThreadPoolExecutor与DelayQueue源码分析

DelayQueue ScheduledThreadPoolExecutor

2016-09-10 20:28:16

阅读数:779

评论数:0

Java多线程 -- JUC包源码分析13 -- Callable/FutureTask源码分析

关于Runnable,我们都已经很熟悉了。在上一篇,我们也分析了ThreadPoolExecutor用来执行任务的接口execute,如下所示:public interface Runnable { public abstract void run(); }public void execute...

2016-09-10 20:21:04

阅读数:1151

评论数:0

Java多线程 -- JUC包源码分析12 -- ThreadPoolExecutor源码分析

在JUC包中,线程池部分本身有很多组件,可以说是前面所分析的各种技术的一个综合应用。从本文开始,将综合前面的知识,逐个分析线程池的各个组件。 -Executor/Executors -ThreadPoolExecutor使用介绍 -ThreadPoolExecutor实现原理 –Threa...

2016-09-09 15:17:30

阅读数:2829

评论数:3

Java多线程 -- JUC包源码分析11 -- CyclicBarrier源码分析

在前面的篇章中,讲解了ReentrantLock + Condition,并讲述了2者结合的一个典型应用:ArrayBlockingQueue/LinkedBlockingQueue。今天讲述2者结合的另一个典型应用:CyclicBarrier。CyclicBarrier的概念要介绍Cyclic...

2016-09-08 23:19:23

阅读数:798

评论数:0

Java多线程 -- JUC包源码分析10 -- ConcurrentLinkedQueue源码分析

在前面的篇章中,我们详细分析了AQS,并提到了里面一个关键数据结构:所有阻塞线程组成的一个等待队列,这个队列是用单向无锁链表实现的。今天所讲的ConcurrentLinkedQueue,其实现和AQS中的无锁队列基本一样。所以,如果你深刻理解了AQS,ConcurrentLinkedQueue也就...

2016-09-08 22:53:07

阅读数:693

评论数:0

Java多线程 -- JUC包源码分析9 -- AbstractQueuedSynchronizer深入分析-- Semaphore与CountDownLatch

在前面分析ReentrantLock/ReentrantReadWriteLock的时候,我们已经对AQS进行过分析。在初步了解了AQS之后,本篇试图对其进行一个更为系统性的分析。因为AQS是为整个同步框架的基石,不光是锁,很多其他同步组件,比如Semaphore, CountDownLatch,...

2016-09-07 23:51:04

阅读数:1212

评论数:0

Java多线程 -- JUC包源码分析8 -- 对happen before的深刻理解

说到happen before,很多人都知道。但因为其理论的抽象,以及在语义上的微妙,使得对happen before的理解,往往陷入“隔靴搔痒“的境地。本文试图宏观性、多角度的来分析围绕happen before的诸多问题,从而搞清楚我们为什么需要happen before?-可见性 -重排序...

2016-09-06 12:03:39

阅读数:1025

评论数:0

Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解

在前面的源码分析中,很多地方用到了Interrupt,在此,对Interrupt做一个深刻总结。一、“中断“这个词有误区,它并不是真的中断一个线程,准备说,应该叫做“中断轻量级阻塞”。什么叫“轻量级阻塞”呢? 就是调用以下这几个函数,所造成的线程阻塞。此时线程是处于Waiting状态,会响应t...

2016-09-05 23:57:12

阅读数:886

评论数:0

Java多线程 -- JUC包源码分析6 -- ConcurrentHashMap

ConcurrentHashMap的源码,从JDK1.6到JDK1.7, 经历了不少变化。在JDK1.7中,好几个地方使用了sun.misc.Unsafe里面的函数,比如UNSAFE.putOrderedObject, UNSAFE.getObject..。对于这些函数的原理,笔者也不甚理解。...

2016-09-05 21:21:10

阅读数:1124

评论数:0

Java多线程 -- JUC包源码分析5 -- Condition/ArrayBlockingQueue/LinkedBlockingQueue/Deque/PriorityBlockingQueue

-await/signal/signalAll与wait/notify/notifyAll区别 -Condition源码分析 -各种BlockingQueue源码分析await,signal,signalAll以下代码,分别展示了wait/notify, 和Condition的await/si...

2016-09-05 01:34:14

阅读数:1587

评论数:0

Java多线程 -- JUC包源码分析4 -- 各种锁与无锁

说到锁,想必很多人就会被如下的各种专业名词绕晕了。本文试图厘清关于锁的各种概念,从而对锁有一个全面而深入的理解。–自旋锁/阻塞锁 –独占锁(排它锁)/共享锁(读写锁) –公平锁/非公平锁 –偏向锁/非偏向锁 –可重入锁 –悲观锁/乐观锁 –ReentrantLock源码分析 –Abs...

2016-09-03 21:18:58

阅读数:1986

评论数:2

Java多线程 -- JUC包源码分析3-- volatile/final语义

-volatile应用1 – 内存可见性 – JMM内存模型 -volatile应用2 – 原子性 -volatile应用3 – 构造函数逸出/DCL问题(Double Checking Locking) -final应用1 – 避免构造函数重排序 -final应用2 – CopyOnWr...

2016-09-03 21:13:40

阅读数:1553

评论数:3

Java多线程 -- JUC包源码分析2 -- Copy On Write/CopyOnWriteArrayList/CopyOnWriteArraySet

上1篇讲述了Java并发编程的第1个基本思想–CAS/乐观锁,这1篇接着讲述并发编程的第2个基本思想:CopyOnWrite - CopyOnWrite基本思想 - CopyOnWriteArrayList - CopyOnWriteArraySet - AtomicReferen...

2016-09-03 21:05:28

阅读数:1318

评论数:2

Java多线程 -- JUC包源码分析1 -- CAS/乐观锁

乐观锁思想 乐观锁的几种具体实现 Java CAS原子操作/AtomicInteger实现 ABA问题/AtomicStampedReference实现 Mysql 乐观锁实现 Mysql MVCC 总结 乐观锁思想问题的提出: 当多个线程或客户端并发修改同1份数据时,不加锁,如何实现互斥访问...

2016-09-03 17:04:32

阅读数:1823

评论数:1

提示
确定要删除当前文章?
取消 删除
关闭
关闭