并发
忆杯清茶
这个作者很懒,什么都没留下…
展开
-
BlockingQueue
BlockingQueue 一、阻塞队列基本方法介绍 谈到线程池,不得不谈到生产者-消费者模式,谈到生产者-消费者,就不得不谈到对应的数据结构,谈到对应的数据结构不得不言BlockingQueue。 顾名思义,BlockingQueue翻译为阻塞队列。队列无非两种操作:入队和出队。而针对于入队出队的边界值的不同,分为几个方法: 抛出异常 特殊值原创 2013-10-31 15:58:07 · 4776 阅读 · 0 评论 -
简单线程池-实例
简单线程池-实例 Task: 目标任务接口类,代表我们要执行的任务。 TaskQueue:任务队列,可以用Queue的随便一个子集。 WorkThread:工作线程,线程池的工作线程,用于去任务队列里取任务调度执行。 ThreadPoolService:线程池服务类,用于构造线程池,开始,关闭线程池等。 SimpleTest:具体任务类,继承Task Task:原创 2013-10-31 17:00:07 · 1007 阅读 · 0 评论 -
J.U.C之Condition
J.U.C之Condition 一、Condition简介 条件队列:它使得一组线程能够通过某种方式来等待特定的条件变成真。传统队列的元素是一个个数据,而与之不同的是,条件队列中的元素时一个个正在等待相关条件的线程。 正如每个Java对象都可以作为一个锁,每个对象同样可以作为一个条件队列,并且Object中的wait、notify和notifyAll方法就构成了内部条件队列的API。对象的内原创 2013-11-14 14:18:17 · 579 阅读 · 0 评论 -
J.U.C之Lock
J.U.C之Lock 一、Lock介绍 在Java5.0之前,在协调对象的访问时可以使用的机制只有synchronized和volatile。Java5.0增加了一种新的机制:ReentrantLock。与之前提到过的机制相反。ReentrantLock并不是一种替代内置加锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。 与内置加锁机制不同的是,Lock提供了一种无条件的、可原创 2013-11-14 11:42:33 · 662 阅读 · 0 评论 -
J.U.C之Exchanger
J.U.C之Exchanger 一、简介 可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。 内存一致性效果:对于通过 Exchanger原创 2013-11-12 17:15:47 · 583 阅读 · 0 评论 -
J.U.C之Semaphore
J.U.C之Semaphore 一、简介 Semaphore是一个计数信号量,从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire,然后再获取许可。每个release添加一个许可,从而可能释放一个正在阻塞的获取者。 初始值为1的Semaphore可以用作互斥体(mutex),并具备不可重入的加锁语义:谁拥有了这个唯一的许可,谁就拥有了互斥锁。 构造方法可以传原创 2013-11-11 16:48:28 · 613 阅读 · 0 评论 -
J.U.C之CountDownLatch
J.U.C之CountDownLatch 一、CountDownLatch介绍 CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程等待。 用给定的计数初始化CountDownLatch。由于调用了CountDown方法,所以在当计数达到0之前,await方法会一直阻塞。之后,会释放所有等待的线程,await的所有后续调用都将立即返回。原创 2013-11-10 22:03:17 · 492 阅读 · 0 评论 -
线程同步
线程同步 监视器 java监视器支持两种线程:互斥和协作。 java虚拟机通过对象锁来实现互斥,允许多个线程在同一个共享数据上独 立而不干扰地工作。 协作则通过object类的wait方法和notify方法来实现,允许多个线程为了同一个目标而共同工作。 我们将监视器比作一个建筑物,里面有很多房间,房间里面有一些数据,并且同一个时间只能被一个线程占据。一个线程进入房间到离开为止,独占其原创 2013-11-22 12:05:16 · 898 阅读 · 0 评论 -
J.U.C之CyclicBarrier
J.U.C之CyclicBarrier 一、CyclicBarrier简介 CyclicBarrier:循环栅栏。这是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时的CyclicBarrier很有用。因为该Barrier在释放等待线程后可重用,所以称为循环的barrier。 我们已经看到通过闭锁来启动一组相关原创 2013-11-11 15:16:55 · 814 阅读 · 0 评论 -
J.U.C之Atomic&CAS
J.U.C之Atomic&CAS 一、并发自增实例 package com.mylearn.thread.atomic; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; /** * Created by IntelliJ原创 2013-11-08 16:28:43 · 840 阅读 · 0 评论 -
J.U.C之CopyOnWriteArrayList
一、引子:List 删除 public static void main(String args[]) { List lst = new ArrayList(); lst.add("first"); lst.add("second"); lst.add("third"); lst.add原创 2013-11-08 10:55:03 · 552 阅读 · 0 评论 -
J.U.C之ConcurrentHashMap分析
ConcurrentHashMap分析 一、ConcurrentHashMap介绍 与HashMap一样,ConcurrentHashMap也是一个基于散列的Map,但它使用了一种完全不同的加锁策略来提供更高的并发性和伸缩性。ConcurrentHashMap并不是将每个方法都在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种粒度更细的加锁机制来实现更大程度的共享。这种机制称为分段原创 2013-11-07 16:08:02 · 950 阅读 · 0 评论 -
缓存思想分析
缓存思想分析 1. 基本思想 缓存,大家都知道,有值直接用;无值,计算后放入缓存系统后供下次使用。 定义一个目标接口:Computable package com.mylearn.cache; /** * Created by IntelliJ IDEA. * User: yingkuohao * Date: 13-11-5 * Time: 下午5:0原创 2013-11-06 11:47:20 · 768 阅读 · 0 评论 -
J.U.C之Future
Future 1. Callable介绍 Executor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,虽然run能写入到日志文件或者将结果放入某个共享的数据结构,但它不能返回一个值或抛出一个受检查的异常。 许多任务实际上都是存在延迟的计算——执行数据库查询,从网络上获取资源,或者计算某个复杂的功能。对于这些任务,Callable是一种更好的抽象:原创 2013-11-06 11:46:16 · 889 阅读 · 0 评论 -
压轴大戏:J.U.C之AQS
J.U.C之AQS 一、AQS简介 AQS的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。子类必须定义更改此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。假定这些条件之后,此类中的其他方法就可以实现所有排队和阻塞机制。子类可以维护其他状态字段,但只是为了获得同步而只追踪使用 getState()、setState(int) 和 compareA原创 2013-11-19 10:14:49 · 892 阅读 · 0 评论 -
ConcurrentLinkedQueue
ConcurrentLinkedQueue 1. 引言 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非原创 2013-10-31 16:01:07 · 645 阅读 · 0 评论 -
线程池原理
线程池执行过程 一、线程池的执行过程 定义一个目标任务类,一般是一个线程 public class Task implements Runnable { int k; public Task(int k) { this.k = k; } public void run() { for (i原创 2013-10-31 17:02:15 · 790 阅读 · 0 评论 -
多线程总览
线程安全的实现方式 线程安全的实现方式 1 一、 什么叫线程安全 1 二、 实现线程安全的方法 2 2.1互斥同步(阻塞,悲观) 2 2.2非阻塞同步(乐观) 2 2.3无同步方案 3 一、什么叫线程安全 定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正原创 2013-10-31 16:09:21 · 801 阅读 · 0 评论 -
blockingQueue毒丸对象使用
package com.mylearn.threadpool.blockingqueue; import java.io.File; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CountD原创 2014-01-14 21:23:04 · 1457 阅读 · 0 评论