
Java Concurrent
olylakers
这个作者很懒,什么都没留下…
展开
-
Java Concurrency In Practice读书笔记之组合对象
组合对象这一章主要讲述的是如何将线程安全或者非线程安全的组件以一种安全的方式组合成更大的组件或程序,并如何保证不会让程序意外破坏这些组件的线程安全性 设计线程安全类的过程中的三个基本要素 对象状态-----变量 状态----变量---不变约束,后验操作 同步策略 任何一个类都是由各种自身的变量来维护其状态的,因此我们要设计一个线程安全的类必须...原创 2011-04-28 22:01:51 · 93 阅读 · 0 评论 -
如何尽可能地使10个线程同时开始工作
在多线程编程中,我们很难控制线程的具体启动时间,调用线程的Start()只是启动一个线程,使其处于就绪阶段,至于什么时候CPU开始执行线程Run方法,这是操作系统调度决定的,在理论上,如果有多个CPU,操作系统的调度可能使的多个线程真正同时开始,但是在单CPU的机器上,是没法做到多个线程真正同时启动的。我们只能尽可能地使得线程之间的启动间隔很短,模拟多个线程同时启动。下面这个程序模拟一个有10辆...2011-05-06 22:34:37 · 1348 阅读 · 0 评论 -
CyclicBarrier解析
CyclicBarrier是一个同步辅助类,允许一组线程相互等待,直到到达一个共同的barrier point。如果一组线程需要不定时地相互等待,这个时候就可以用到CyclicBarrier。CyclicBarrier之所以带“Cyclic”前缀,是因为当所有相互等待的线程释放后,Barrier可以被重复利用。 CyclicBarrier的构造函数为: public Cycl...2011-05-09 18:39:20 · 81 阅读 · 0 评论 -
Non-Blocking stack和Block stack的插入时间对比
本文通过对实现了两个Stack,一个是基于非阻塞(Non-Blocking)算法,另一个是基于阻塞算法(Blocking)的,然后对这两个队列进行多线程环境下的大量Insert操作,通过比较二者的消耗时间,进而比较基于Volatile和CAS轮询操作的非阻塞算法和基于锁的阻塞算法在时间上的性能差异究竟有多大。 基于非阻塞算法的Stack public class Concurr...2011-05-17 13:25:29 · 117 阅读 · 0 评论 -
Java Concurrency In Practice之Java非阻塞算法解析
基于锁得算法会带来一些活跃度失败的风险。如果线程在持有锁得时候因为阻塞I/O,页面错误,或其它原因发生延迟,很可能所有线程都不能前进了。一个线程的失败或者挂起 不应该影响其他线程的失败或挂起,这样的算法称为非阻塞(nonblocking)算法;如果算法的每一步骤中都有一些线程能够继续执行,那么这样的算法称为锁自由(lock-free)算法。在线程间使用CAS进行协调,这样的算法如果能...2011-05-17 13:28:14 · 131 阅读 · 0 评论 -
ScheduledThreadPoolExecutor的scheduleAtFixedRate方法探究
ScheduledThreadPoolExecutor除了具有ThreadPoolExecutor的所有功能外,还可以延迟执行任务或者周期性的执行某个任务。scheduleWithFixedDelay和scheduleAtFixedRate就是用来完成这个功能的。平常使用scheduleAtFixedRate这个方法时并没有多想,但是这几天在实现一个功能的时候,需要考虑scheduleAt...2011-10-31 23:04:06 · 508 阅读 · 0 评论