Java中CountDownLatch和CyclicBarrier的区别.md

1. 通常认识

CountDownLatch是减计数、CyclicBarrier是加计数

CountDownLatch没法reset被复用、CyclicBarrier可以reset被复用

2. 更多思考

首先看下JAVA DOC的说明:

CountDownLatch: A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.

CyclicBarrier: A s......

ForkJoinPool解读

1. 介绍

JDK1.7在并发包里面引入了这个玩意儿。根据 Doug Lea 的论文——《A Java Fork/Join Framework》而来。主要通过分而治之(把大任务分割成若干个小任务)然后合并结果这种思想来实现的线程池。有更加好的并发性能。之所以有更好的并发性能,是因为其充分利用了所有线程的工作能力,避免空闲线程,充分发挥多核并行的处理能力。这个关键是后面的working stealing算法。

此外强烈推荐下Java7中的ForkJoin并发框架初探(中)这个系列的文章,作为我这篇文章的补充阅读吧。写的很好。

PS: 本文的介绍主要以JDK1.7版本为例

......

c10k问题与异步非阻塞

1. 什么是C10K问题

字面意思就是concurrency 10K,实际上就是说如何解决大并发问题。

2. 常见解决方案

2.1 异步非阻塞

2.1.1 I/O模型

出现C10K问题,各个操作系统都从OS层面提供了异步非阻塞的IO模型

FressBS有kqueue,Windows有IOCP,linux有epoll。

2.1.2 新IO模型的产物

在这种异步非阻塞IO模型下,也诞生了很多优秀产品:

nginx:高性能的HTTP和反向代理服务器

libevent:高性能网络库

node.js:基于 Chrome V8 引擎的 JavaScript 运行......

再议volatile

1. 介绍

本文是我看了并发编程网“聊聊并发”系列文章的总结。查看完整原文地址点我查看

2. volatile

这个东西其实已经讨论了好多次了,在我们的博客里面可以看内存屏障和volatile语义。

但是之前的总结总感觉比较啰嗦,没把核心内容用精炼的话总结出来。这次再来对volatile做一次总结。

2.1 为什么使用volatile

开销小:volatile修饰符如果使用得当将会有更小的开销,因为它不会引起线程上下文的切换和调度。

2.2 volatile如何保证可见性以及内存屏障的含义

线程可见性:java线程内存模型确保所有线程看到这个变量的值是......

Java的可见性和原子性

1. 工作内存和主内存

所有的变量都存在主内存中(一份)

每个线程有自己独立的工作内存(主内存中该变量的一份拷贝)

2. 可见性和共享变量

可见性:一个共享变量的值能够及时地被其他线程看到

共享变量:如果一个变量在多个线程的工作内存中都存在拷贝,那么它就是这几个线程的共享变量

下图可以反映以上说明:

3. 约束

线程对共享变量的操作只能在自己的工作内存中进行,不能直接修改......