concurrent
文章平均质量分 84
牛奋lch
我是一只快乐的程序猿……
展开
-
java并发编程系列之Lock的使用
Jdk1.5中,在java.util.concurrent.locks包下,有一组实现线程同步的接口和类,说到线程的同步,很多立马就会想到synchronized关键字,这是java内置的关键字,用来处理线程同步的,但这个关键字有很多的缺陷,使用起来也不是很方便和直观,所以就出现了Lock,下面,我们就来对比着讲解Lock。 synchronized关键字: 该关键字在使用的过程中会有如下几个原创 2016-12-09 15:11:50 · 734 阅读 · 0 评论 -
java并发编程系列之ReadWriteLock读写锁的使用
前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读与读之间互斥。 ReadWriteLock也是一个接口,原型如下: public interface ReadWriteLock { Lock readLock(); Lock w原创 2016-12-09 15:20:21 · 15585 阅读 · 6 评论 -
java并发编程系列之Callable与Future的应用
在我们传统的观念中,创建线程无非就两种方式:1、直接new 一个Thread;2、实现Runnable,其实这两种方式的实质是一样的,有一个共同的特点:无返回值,并且无法抛出返回结果的异常,顺便我们讲一下其他的线程创建方式。那我们想拿到线程的返回值,怎么做了?我们可以使用java并发包中的Callable和Future来实现。下面就来分享一下实现方式。 1、Callable接口 Callabl原创 2016-12-09 15:27:32 · 596 阅读 · 0 评论 -
java并发编程系列之Condition的使用
Condition是做什么用的了?Condition是用来实现线程间通信的,说到这,可能很多人都想到了wait和notify以及notifyAll,没错,Condition的功能和他们类似,只是功能更强而已,下面我们就来学习一下线程间通过Condition来实现通信。 Condition也是jdk1.5并发包下的一个接口,原型如下: public interface Condition {原创 2016-12-09 15:31:34 · 593 阅读 · 0 评论 -
java并发编程系列之Semaphore信号量的使用
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。一个计数信号量,从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用原创 2016-12-09 15:34:23 · 4675 阅读 · 0 评论 -
java并发编程系列之CyclicBarrier的使用
在日常活动中,经常会遇到这样一种场景:我们会约定在某个地点集合,等所有的组员都集合后,然后我们才开始活动,等活动结束后,所有的组员再一次集合,报道后再各自回家。在我们的程序中,也会经常遇到这种场景,需要所有的子线程都结束之后,再汇聚所有的结果,然后根据结果在决定下一步的操作,这个时候,我们就需要使用CyclicBarrier,进行线程的同步。下面先看一个简单的示例,代码如下: public cl原创 2016-12-09 15:38:25 · 663 阅读 · 0 评论 -
java并发编程系列之CountDownLatch的使用
说到定时器,我们就会想到java中的Timer。在jdk1.5中,也提供了一个类似定时器功能的类CountDownLatch,只不过两者有些区别,CountDownLatch类同一时刻只能由一个线程去操作也就是说,在多线程并发下,同时只能由其中的一个线程去操作这个计时器。CountDownLatch 的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下原创 2016-12-09 15:42:37 · 718 阅读 · 0 评论 -
java并发编程系列之Exchanger的使用
我们在看香港的警匪片的时候,经常会有这种画面,毒贩和贩毒的人,会先约定某个地点,然后进行一手交钱一手交白粉的勾当,其实这种场景使用jdk1.5并发包中的Exchanger类也可以实现,下面我们就用一个简单的示例,来模拟下这种场景,示例代码如下: public class ExchangeDemo { public static void main(String[] args) { // 新原创 2016-12-09 15:46:59 · 1478 阅读 · 1 评论