Java 多线程(7): ThreadLocal 的应用及原理

2017-07-19
阅读 8 分钟
7.3k
在涉及到多线程需要共享变量的时候,一般有两种方法:其一就是使用互斥锁,使得在每个时刻只能有一个线程访问该变量,好处就是便于编码(直接使用 synchronized 关键字进行同步访问),缺点在于这增加了线程间的竞争,降低了效率;其二就是使用本文要讲的 ThreadLocal。如果说 synchronized 是以“时间换空间”,那么 Thre...

Java8(6):使用并行流

2017-03-31
阅读 7 分钟
6.4k
对于斐波那契数的计算,我们都知道最容易理解的就是递归的方法: {代码...} 当然这个递归也可以转化为迭代: {代码...} 但是,对于以上两种方法,并不能并行化,因为后一项的值依赖于前一项,使得算法流程是串行的。所以引出了可以并行的计算斐波那契数的公式: => f0 和 f1 都是 1 —— 很明显我们可以对 进行并行计算...

Java 多线程(6):volatile 关键字的使用

2017-03-10
阅读 4 分钟
4.6k
volatile 作为 Java 语言的一个关键字,被看作是轻量级的 synchronized(锁)。虽然 volatile 只具有synchronized 的部分功能,但是一般使用 volatile 会比使用 synchronized 更有效率。在编写多线程程序的时候,volatile 修饰的变量能够:

Java 多线程(5):Fork/Join 型线程池与 Work-Stealing 算法

2017-01-17
阅读 5 分钟
15.9k
JDK 1.7 时,标准类库添加了 ForkJoinPool,作为对 Fork/Join 型线程池的实现。Fork 在英文中有 分叉 的意思,而 Join 有 合并 的意思。ForkJoinPool 的功能也是如此:Fork 将大任务分叉为多个小任务,然后让小任务执行,Join 是获得小任务的结果,然后进行合并,将合并的结果作为大任务的结果 —— 并且这会是一个递归的...