Java并发 concurrent

concurrent包的实现

由于JavaCAS具有volatilevolatile写的内存语义,因此Java线程之的通信
在有了下面4种方式。
1A线程写volatile量,随后B线读这volatile量。
2A线程写volatile量,随后B线程用CAS更新volatile量。
3A线程用CAS更新个volatile变量,随后B线程用CAS更新volatile量。
4A线程用CAS更新个volatile变量,随后B线读这volatile量。concurrent包的实现示意图:

 

Java并发 concurrent

阻塞队列 BlockingQueue :表示一个线程安放入和提取实例的队列

用法:BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景

一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue

方法:

方法 抛异常 特定值 阻塞 超时
插入 add(o) offer(o) put(o) offer(o, timeout, timeunit)
移除 remove(o) poll(o) take(o) poll(timeout, timeunit)
检查 element(o) peek(o)  

抛异常:如果试图的操作无法立即执行,抛一个异常。
特定值:如果试图的操作无法立即执行,返回一个特定的值(常常是 true / false)。
阻塞:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行。
超时:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行,但等待时间不

ArrayBlockingQueue :是一个有界的阻塞队列,其内部实现是将对象放到一个数组里。

    如: BlockingQueue queues = new ArrayBlockingQueue(1024);

DelayQueue( 延迟队列): 实现了 BlockingQueue 接口。DelayQueue 对元素进行持有直到一个特定的延迟到期