java7并发编程
文章平均质量分 68
Jerry_Fu24
这个作者很懒,什么都没留下…
展开
-
Java7并发编程--1、线程管理
1.1 简介 并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。原创 2016-07-23 22:11:15 · 1123 阅读 · 0 评论 -
Java7并发编程--4.4、在执行器中执行任务并且返回结果
执行器框架(Executor Framework)提供了ThreadPoolExecutor类并采用线程池来执行Callable和Runnable类型的任务,但是如果不想任务马上执行,而是想让任务过一段时间后才被执行,或者任务能够被周期性执行。为了这个目的,执行框架提供了ScheduledThreadPoolExecutor类。它是ThreadPoolExecutor的子类延迟要使用s原创 2016-08-11 20:28:59 · 377 阅读 · 0 评论 -
Java7并发编程--4.3、运行多个任务并处理结果
处理第一个结果1、使用 ThreadPoolExecutor.invokeAny(list); 让线程池来帮我们拿到最快返回结果的结果。invokeAny()方法接收一个列表,然后运行任务,并且返回第一个完成任务并且没有抛出异常的任务的执行结果。这个方法的返回类型与call()方法的返回类型相同。3、拿到第一个结果后,执行器会取消未完成的任务4、如果所有任务都抛出了异常,那么最终返回结原创 2016-08-11 18:22:33 · 343 阅读 · 0 评论 -
Java7并发编程--4.2、在执行器中执行任务并且返回结果
执行框架(Executor Framework)的优势之一就是,可以在运行并发任务的时候返回结果。但是需要以下两个类来实现功能: 接口 Callable返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。 Callable 接口类似于 Runnable。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。 Executo原创 2016-08-11 17:37:59 · 379 阅读 · 0 评论 -
Java7并发编程--4.1、创建线程执行器
使用执行器框架(Executor Framework)的第一步就是创建ThreadPoolExecutor对象。可以使用ThreadPoolExecutor类提供的四个构造器或者使用Executors工厂类来创建ThreadPoolExecutor对象,鉴于这些构造器在使用上的复杂性,推荐使用Executors工厂类来创建,一旦有了执行器就可以将Runnable或者Callable对象发送给它去执原创 2016-08-11 14:13:47 · 342 阅读 · 0 评论 -
Java7并发编程--4、线程执行框架
通常用java来开发一些简单的并发应用,会创建一些runnable对象,然后创建对应的Thread对象来执行他们,但是如果需要开发一个程序来运行大量的并发任务,再使用以前的方法,将会带来以下几点劣势: 1. 必须实现所有与thread对象管理相关的代码,比如线程的创建、执行、结束、以及结果。 2. 需要为每一个任务创建一个Thread对象,如果需要执行大量的任务,这将大大的影响应用程序的处原创 2016-08-11 13:31:25 · 330 阅读 · 0 评论 -
Java7并发编程--3.6、Exchanger并发任务间的数据交换
Exchanger 是一个同步辅助类,用于两个并发线程之间在一个同步点进行数据交换。 关于Exchanger 的使用:两个线程必须使用同一个Exchanger对象,且只能是两个线程间的数据交换exchanger.exchange(v)的时候,当前线程会被阻塞,直到另一个线程执行该方法,同时完成数据的交换类似这种数据交换的,生产者线程一定要先生产数据,再交换数据,消费者线原创 2016-08-11 13:14:49 · 314 阅读 · 0 评论 -
Java7并发编程--3.5、Phaser并发阶段任务中的阶段切换
在phaser中,有一个onAdvance方法, 该方法在参与者数量为0的时候,返回true,来表示该phaser状态为终止状态。它在phaser阶段改变的时候会自动执行。他需要两个参数,当前阶段数和注册的参与者数量。继承并覆盖phaser的 onAdvance 方法,来实现阶段切换的功能,要注意onAdvance方法中的 phase 是阶段的序号,在使用序号来判断的时候,需要注意动态注册的线原创 2016-08-11 12:50:51 · 408 阅读 · 0 评论 -
Java7并发编程--3.4、Phaser并发阶段任务的运行
Phaser是一个更强大的、更复杂的同步辅助类,可以代替CyclicBarrier CountDownLatch的功能,但是比他们更强大。 Phaser类机制是在每一步结束的位置对线程进行同步,当所有的线程都完成了这一步,才能进行下一步。 当我们有并发任务并且需要分解成几步执行的时候,这种机制就非常适合。 CyclicBarrier Co原创 2016-08-11 03:38:52 · 2629 阅读 · 0 评论 -
Java7并发编程--3.3、CyclicBarrier在集合点同步
CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的barrier。 注意比较CountDownLatch和CyclicBarrier: 1. CountDownLatch的作用是允许1或N个线程等待其他线程完成原创 2016-08-11 03:06:47 · 489 阅读 · 0 评论 -
Java7并发编程--3.2、CountDownLatch等待多个并发事件完成
CountDownLatch是一个同步辅助类,不保证同步,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 假如说:有a、b、c 三个线程,c 需要a,b线程的结果,所以c需要等待 a,b 线程都执行完了,c才能拿到正确的结果。 就是该类的一个使用场景。 countDown() 来计数(计时) await() 创建屏原创 2016-08-11 02:04:05 · 280 阅读 · 0 评论 -
Java7并发编程--3.1、信号量Semaphore机制
信号量是一种计数器,用来保护一个或多个共享资源的保护。 如果线程要访问一个共享资源,它首先必须获得信号量。如果信号量的内部计数器大于0,则信号量减1,然后允许访问这个共享资源。计数器大于0意味着有可以使用的资源,因此线程将被允许使用其中的一个资源。 否则信号量的计数器等于0,信号量会把线程休眠直至计数器大于0。计数器等于0意味着所有共享资源已被其他线程用光,所以访问原创 2016-08-11 01:37:58 · 385 阅读 · 0 评论 -
Java7并发编程--3、线程同步辅助类
常用的同步有synchronized关键字、Lock接口以及实现类,如ReentrantLock、ReentrantReadWriteLock中的ReadLock和WriteLock。 在本章中将以以下几个更高级的同步机制来实现多线程的同步。信号量(Semaphore): 是一种计数器,用来保护一个或则多个共享资源的访问,它是并发编程的一种基础工具,大多数编程语言原创 2016-08-11 00:31:25 · 444 阅读 · 0 评论 -
Java7并发编程--2、锁中使用多条件condition
在lock中提供了与之关联的条件,一个锁可能关联一个或多个条件,这些条件通过condition接口声明。目的是运行线程获取锁并且查看等待某一个条件是否满足,如果不满足则挂起直到某个线程唤醒它们。condition接口提供了挂起线程和唤起线程的机制; 介绍下下面一堆代码所做的事情:使用了5个线程设置(生产)一个数值,使用5个线程移除(消费)这个数值; 在add 和 remoe中使原创 2016-08-10 23:38:20 · 3107 阅读 · 0 评论 -
Java7并发编程--5、并发集合
Java提供了两类适用于并发场景下的集合:阻塞式集合(Blocking Collection):这类集合包括添加和移除数据的方法,当集合已满或为空时,被调用的添加或者移除方法就不能立即被执行,那么调用这个方法的线程将被阻塞,一直到该方法可以被成功执行。非阻塞式集合(Non-Blocking Collection):这类集合也包括添加和移除数据的方法,只是如果方法不能立即被执行,则返回n原创 2016-08-11 21:22:06 · 896 阅读 · 0 评论