java · 第 5 页

并发工具类的同步器

本文介绍JDK中并发工具类的各种同步器,倒计时门闩(countdown latch)、同步屏障(cyclic barrier)、交换器(exchanger)、信号量(semaphore)以及phaser同步器。 一、倒计时门闩 java.util.concurrent.CountDownLatch同

关于join()的一个小坑

很多情况下,主线程创建并启动子线程,如果子线程中要进行比较耗时的运算,并且希望主线程等待子线程执行完毕之后再执行。那么就可以使用join()方法,它是线程类Thread的一个用于等待线程对象销毁的方法,底层是wait()方法。 join()的使用比较简单,但是有个小坑需要注意一下。 下面看这个例子:

通过管道进行线程间通信

管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读数据。通过管道,实现不同线程间的通信,而无须借助类似共享变量、临时文件之类的东西。 在java的JDK中提供了4个类来使线程间可以进行通信: ` 管道字节流 Piped

回顾经典:生产者与消费者模式

等待/通知模式最经典的案例就是“生产者/消费者”模式。但此模式在使用上有几种“变形”,还有一些小的注意事项,但原理上都是基于wati/notify的。《Java多线程编程核心技术》 案例——1对1的生产者与消费者模式 创建一个消费者和一个生产者,生产者每生产一个产品,消费者就会去消费这个产品。在没有

线程通信基础:wait和notify

wait() 方法wait()的作用是使当前执行代码的线程进行等待,它是Object类的方法,用来将当前线程置入“预执行队列”中,并且在wait()所在的代码行处停止执行,直到接到通知或被中断为止。 在调用wait()之前,线程必须获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方

synchronize可以锁住一个方法?

记得有一次在面试一个实习生的时候,闻到了一个synchronize的相关问题,他提到“synchronize通过锁住一个方法或者一段代码实现同步效果”。这句话从表面上看其实也没有什么问题,毕竟从代码上看就是这么回事—— ` public synchronized void run() {

volatile关键字与内存模型

对volatile关键字的理解,与java的内存模型的概念是分不开的。 从内存模型说起 java中有个概念叫内存模型,大体是这样的一种结构: [ ]()java内存模型 java内存模型规定了所有的变量都存储在主内存中,即是虚拟机内存的一部分。 每条线程拥有自己的工作内存,线程不能直接读写主内存中的

设计模式之适配器模式

适配器模式 所谓适配器,其实就是在不得不调用某个底层接口规范, 但出于某些需要又必须声明自己专属的接口规范的时候,可以声明一个对象实现自己的接口、同时又调用到该底层接口, 该对象即是适配器。 适配器做了两个接口之间的转换工作, 提供自定义接口的同时又隐藏了实际的底层接口。 角色 适配者对象:Adpt

设计模式之责任链模式

责任链模式 在责任链模式里,一个对象表示链的一个节点,由多个节点对象组成了一条有先后顺序的链对象。有些链对象内部会维护一个数组,来存储这些节点对象,有些则是在每个节点中声明下个节点的引用。 Tomcat中的Filter以及SpringSecurity的拦截器就是使用了责任链模式。 案例1 使用责任链

设计模式之装饰模式

装饰模式 装饰模式(Decorator Pattern)是一种比较常见的模式,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 tomcat源码中RequestFacade就是对Request的装饰类。 案例 被装饰者 ` //被装饰者 public class C

设计模式之观察者模式

观察者模式 观察者模式经常被用于监督进度条等场景,其特点如下: 1、观察者模式主要分为两个主体:观察者和通知者,在某些行为触发时,通知者将会通知观察者。 2、观察者需要将自己的对象交给通知者,以便通知者能够调用观察者的方法,进行通知行为。 3、观察者和通知者是多对一的关系。 4、这种模式的缺点在于,

设计模式之模板方法模式

模板方法模式 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 比如定义一个操作中的算法的骨架,将步骤延迟到