这里我们介绍一下在多线程中如何安全正确的编写单例模式的代码.不知为何,恰如其分的话总是姗姗来迟,错过最恰当的时机. 多线程中的单例模式 这里面通过代码来体会一下在多线程中如何正确的编写单例模式的代码.相同的代码如下,不同的是Object这个类. package com.linux.huhx.thread3.singleDesign_1; /** * @Author: huhx * @Date: 2017-10-31 下午 4:28 */ public class SingleDesignTest…
ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用.今天我们来学习一下ScheduledExecutorService的用法.我们都太渺小了,那么容易便湮没于各自的殊途. ScheduledExecutorService的简单使用 一.使用scheduleAtFixedRate()方法实现周期性执行 public class ScheduledExecutorServiceTest { public static void main(String[]…
今天我们通过实例来学习一下ExecutorService的用法.我徒然学会了抗拒热闹,却还来不及透悟真正的冷清. ExecutorService的简单实例 一.ExecutorService的简单使用例子 public class ExecutorServiceTest { public static void main(String[] args) throws Exception { ExecutorService service = Executors.newSingleThreadExe…
Phaser提供了动态增parties计数,这点比CyclicBarrier类操作parties更加方便.它是jdk1.7新增的类,今天我们就来学习一下它的用法.尘埃落定之后,回忆别来挑拨. Phaser的简单使用 一.Phaser的arriveAndAwaitAdvance方法使用 package com.linux.thread.thread; import java.util.concurrent.Phaser; public class PhaserRun1 { public stati…
CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离开来进行处理.今天我们通过实例来学习一下CompletionService的用法. CompletionService的简单使用 使用submit()方法执行任务,使用take取得已完成的任务,并按照完成这些任务的时间顺序处理它们的结果. 一.CompletionService的submit方法 public class CompletionServiceTest {…
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).今天我们就学习一下CyclicBarrier的用法. CyclicBarrier的简单使用 类CyclicBarrier不仅有CountDownLatch所具有的功能,还可以实现屏障等待的功能,也就是阶段性同步,它在使用上的意义在于可以循环地实现线程要一起做任务的目标,而不是像类CountDownLatch一样,仅仅支持一次线程与同步点阻塞的特性. 关于Cyc…
今天我们通过实例来学习一下BlockingQueue的用法.梦想,可以天花乱坠,理想,是我们一步一个脚印踩出来的坎坷道路. BlockingQueue的实例 官方文档上的对于BlockingQueue的说明: A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to becom…
Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据.今天我们就通过实例来学习一下Exchanger的用法. Exchanger的简单实例 Exchanger是在两个任务之间交换对象的栅栏,当这些任务进入栅栏时,它们各自拥有一个对象.当他们离开时,它们都拥有之前由对象持有的对象.它典型的应用场景是:一个任务在创建对象,这些对象的生产代价很高昂,而另一个任务在消费这些对象.通过这种方式,可以有更多的对象在被创建的同时被消费. 一.Exchanger的简单使用…
FutureTask类是Future 的一个实现,并实现了Runnable,所以可通过Excutor(线程池) 来执行,也可传递给Thread对象执行.今天我们通过实例来学习一下FutureTask的用法. 多线程中FutureTask的使用 一.FutureTask的简单使用 package com.huhx.chenhui.nio; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionExcep…
Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set).其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用.今天我们就通过实例来学习一个Condition的用法. 多线程中Condition的简单使用 一.关于装水取水的例子 BoundedBuffer:没有…