Volume 2 Java并发
文章平均质量分 84
dukeofyork
这个作者很懒,什么都没留下…
展开
-
Chapter 8 浅析CountDownLatch类
1 概述CountDownLatch类是Java的j.u.c包中的一个线程同步的辅助类,顾名思义,它可以看成一个倒计时计数器。其主要功能是让某个(或某些)线程等待另外某个(或某些)线程执行结束才接着执行。通过构造函数传入一个指定数值给CountDownLatch对象,通过调用其await方法可以使线程会陷入等待之中,直到这个CountDownLatch对象的countDown方法被调用的次原创 2016-10-30 15:00:20 · 240 阅读 · 0 评论 -
Chapter 11 浅析Exchanger类
1 概述Exchanger类是java的j.u.c包中的同步辅助类,它特定作用于两个线程。这两个线程可以交换对象的同步点,在进入exchange方法时线程给出某个对象,并接受另外一个线程返回时给出的对象。和CyclicBarrier类相似的是,它们都是用来同步线程,使其动作的节奏一致,即都干完了某些事才能干下一件事。但是不同的是,Exchanger类只作用于两个线程,并且在调用阻塞方法ex原创 2016-11-20 15:20:21 · 286 阅读 · 0 评论 -
Chapter 1 创建线程的两种方式
1 基本概念进程:进程是操作系统结构的基础,是一个正在执行的程序,是可以分配给处理器并由其执行的一个实体。线程:线程是进程中独立运行的子任务,是操作系统能够进行运算调度的最小单位。多线程:程序在同一时间内运行多种任务,由于CPU在这些任务之间的切换十分的快,使得用户觉得这些任务就是在同时运行,使用多线程可以大大提升系统的运行效率。2 Java创建线程的两种方式原创 2016-10-09 23:21:33 · 277 阅读 · 0 评论 -
Chapter 2 验证synchronize同步函数时加的锁
1 背景介绍当多个线程访问同一资源时,需要用关键字synchronize进行同步。这时,用两种同步的方式,即同步代码块和同步函数。其中,使用同步代码块时必须指定用来同步的对象,也就是所加的锁。而使用同步函数时,只需要加synchronize写在权限修饰符之后就可以而不需要明确的指定用来同步的对象。那么,使用同步函数时所加的锁到底是什么呢,即用来同步的对象是什么呢?2 普通函数原创 2016-10-09 23:25:44 · 354 阅读 · 0 评论 -
Chapter 3 Vector类还需要同步吗
1 背景1.1 Vector与ArrayListVector和ArrayList同样是用来存储数量可变的对象的容器,其二者用法相似,但是也有一些不同点。其中一个重要的不同是,Vector是线程安全的,它的方法如add,get等都是被synchronize关键字修饰的,而ArrayList没有。类似的情形也出现在HashTable与HashMap两个类的对比上。1.2 绝对的原创 2016-10-09 23:30:57 · 322 阅读 · 0 评论 -
Chapter 4 suspend和resume方法
1 暂停和恢复线程在Java并发中可以使用suspend方法和resume方法分别来暂停和恢复线程的执行。虽然这两个已经被弃用了,但是有必要探究一下它们为什么被抛弃。2 使用样例参考下面的简单的案例和结果的截图可以大致了解这两个方法的使用方法,这里不多做解释。/** * Created by fubinhe on 16/9/28. */public class原创 2016-10-09 23:35:57 · 367 阅读 · 0 评论 -
Chapter 5 生产者消费者系列之传统实现
1 背景线程间通信是多线程十分重要的一个知识点,Java多线程是用基于wait/notify的等待/通知模式实现的。其一个经典的案例就是“生产者消费者模式”。其中,生产者负责生产商品,消费者负责消费商品。在没有商品时,消费者必须等待生产者生产;而在已经有商品时,生产者必须等待消费者消费完才能继续消费。当然,还有“变种”模式,就是生产者可以生产商品堆积,但是堆积的数目不能超过一定的数目。可是原创 2016-10-09 23:42:22 · 198 阅读 · 0 评论 -
Chapter 6 生产者消费者之Condition实现
1 背景在上一篇blog:Chapter 5 生产者消费者系列之传统实现中介绍了一下传统方式实现生产者消费者的原理。通过wait/notifyAll的方式,实现多个生产者和消费者线程之间的通信,然而这种方式比较“浅层”,会造成资源上的浪费。通过Condtion对象,能更有针对性的唤醒线程。具体的方式是,在同一把锁上绑定两个Condition对象,分别对应生产者和消费者,唤醒时通过Condi原创 2016-10-09 23:48:46 · 326 阅读 · 0 评论 -
Chapter 7 生产者消费者之ArrayBlockingQueue实现
1 背景在Java1.5中提供了很多并发类,其中ArrayBlockingQueue就是其中的一个。ArrayBlockingQueue为BlockingQueue的实现类,常用的阻塞队列。使用这个类能很方便的实现生产者和消费者的经典模式。其提供的阻塞式方法put与take能屏弊同步的细节。并且,在前面的几篇wiki当中都是默认实现生产单个商品的,如果需要实现生产多个商品(即容许商品堆积)原创 2016-10-09 23:50:46 · 285 阅读 · 0 评论 -
Chapter 10 浅析Semaphore类
1 概况信号量是操作系统中很重要的一个概论,在Java中,可以通过j.u.c库中的Semaphore这个类很轻松完成对信号量的控制。通常,Semaphore类可以用来控制某个资源可被同时访问的个数,例如可以控制某个共享文件同时被多少个客户端访问。这里用网上烂大街的例子来解释一个Seamphore类的用途。例如有个卫生间,有4个坑位,有8个人排队上卫生间。那么最多同时有4个人可以同时原创 2016-11-12 18:34:56 · 326 阅读 · 0 评论 -
Chapter 9 浅析CyclicBarrier类
1 概述和CountDownLatch类相似,CyclicBarrier类是Java的j.u.c包中的一个线程同步的辅助类,其主要功能是让一组线程互相等待,直到抵达某个公共屏障点,这个障碍点(即barrier)也可以称为同步点。由于这个barrier在释放等待线程后可以被重用,因此被称为循环的,即cyclic。2 典型应用CyclicBarrier类的典型应用场景是这样的:原创 2016-11-06 16:04:34 · 225 阅读 · 0 评论 -
Chapter 12 CopyOnWriteArrayList原理分析
1 概述JDK1.5的j.u.c库中提供了Copy-On-Write机制,简称为COW。其实现的基本思想是,开始的时候只有一份内容,当某个线程想要修改这个内容的时候,会将其拷贝出去形成一份新的内容,在这份新的内容上进行修改,这是一种延时懒惰策略。用该机制形成的有两个并发容器,即CopyOnWriteArrayList和CopyOnWriteArraySet。其中,后者是基于前者实现的,当进原创 2016-12-03 19:55:24 · 328 阅读 · 0 评论