09 2014 档案
摘要:Java中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止。但有时需要在任务正在运行时取消他们,使得线程快速结束。对此Java并没有提供任何机制。但是我们可以通过Java提供的线程中断机制来实现。首先来看Thread类三个和中断有关的方法:public class Thread...
阅读全文
摘要:《java.util.concurrent 包源码阅读》系列文章已经全部写完了。开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码,一边写文章。由于水平有限,在阅读源代码的时候,分析得也比较浅显,还有很多地方自己也没有研究明白,有的地方显得语焉不详...
阅读全文
摘要:这一部分来分析Phaser关于线程等待的实现。所谓线程等待Phaser的当前phase结束并转到下一个phase的过程。Phaser提供了三个方法:// 不可中断,没有超时的版本public int awaitAdvance(int phase);// 可以中断,没有超时的版本public int ...
阅读全文
摘要:Phaser是JDK7新添加的线程同步辅助类,作用同CyclicBarrier,CountDownLatch类似,但是使用起来更加灵活:1. Parties是动态的。2. Phaser支持树状结构,即Phaser可以有一个父Phaser。Phaser的构造函数涉及到两个参数:父Phaser和初始的p...
阅读全文
摘要:接下来看看调用ForkJoinTask的join方法都发生了什么: public final V join() { // doJoin方法返回该任务的状态,状态值有三种: // NORMAL, CANCELLED和EXCEPTIONAL // join...
阅读全文
摘要:在写前面两篇文章23和24的时候自己有很多细节搞得不是很明白,这篇文章把Fork和Work-Stealing相关的源代码重新梳理一下。首先来看一些线程池定义的成员变量:关于scanGuard:volatile int scanGuard;private static final int SG_UNI...
阅读全文
摘要:仔细看了Doug Lea的那篇文章:A Java Fork/Join Framework 中关于Work-Stealing的部分,下面列出该算法的要点(基本是原文的翻译):1. 每个Worker线程都维护一个任务队列,即ForkJoinWorkerThread中的任务队列。2. 任务队列是双向队列,...
阅读全文
摘要:上篇文章一直追踪到了ForkJoinWorkerThread的pushTask方法,仍然没有办法解释Fork的原理,那么不妨来看看ForkJoinWorkerThread的run方法: public void run() { Throwable exception = null;...
阅读全文
摘要:JDK7引入了Fork/Join框架,所谓Fork/Join框架,个人解释:Fork分解任务成独立的子任务,用多线程去执行这些子任务,Join合并子任务的结果。这样就能使用多线程的方式来执行一个任务。JDK7引入的Fork/Join有三个核心类:ForkJoinPool,执行任务的线程池ForkJo...
阅读全文
摘要:CyclicBarrier是一个用于线程同步的辅助类,它允许一组线程等待彼此,直到所有线程都到达集合点,然后执行某个设定的任务。现实中有个很好的例子来形容:几个人约定了某个地方集中,然后一起出发去旅行。每个参与的人就是一个线程,CyclicBarrier就是那个集合点,所有人到了之后,就一起出发。C...
阅读全文

浙公网安备 33010602011771号