java.util.concurrent包

在JavaSE5中,JUC(java.util.concurrent)包出现了
在java.util.concurrent包及其子包中,有了很多好玩的新东西:
1、执行器的概念和线程池的实现。Executor、ExecutorService框架
从Executor接口开始,到ExecutorService,再到很多基于ThreadPoolExecutor实现的具体执行器。执行器实际上是采用了一种叫做命令模式的设计,将任务Runnable和具体执行线程相分离,并给出了生命周期等管理方法,一般只要execute一个Runnable任务即可。未能及时执行的任务放在一个队列中等待执行,这又是一种Producer & Customer模式。线程池的实现,则可以更方便地管理执行的线程,如重用线程,并限定线程所占资源上界,比起直接Thread的简陋用法更有实用更方便更有效率。
2、Callable、Future。
前者使得提交线程有返回结果变成可能(Runnable的run()是void的),后者则对任务的生命周期控制更为直接。和CompletionService结合起来用更灵活。
3、原子类。
原子类的很多操作能够保证原子性,不保留中间状态,可以高效解决很多线程安全问题。需要注意的是,虽然java.util.concurrent.atomic包中有AtomicInteger、AtomicLong和AtomicReference等,但却没有AtomicDouble和AtomicFloat,这个需要自己实现。Sun的JDK原子类的操作很多是基于sun.misc.Unsafe的(此类并未随Jdk源码一起开放)。
4、锁机制。
java.util.concurrent除了atomic子包外,还有一个locks的子包。除了Java平台固有的synchronized对象锁机制,JavaSE5中的并发包用Java代码重新实现了一套锁机制,而这些很多都是基于前面提到的Unsafe类的原子操作。AbstractQueuedSynchronizer是这个体系中重要的抽象类。在JUC锁的实现体系中有和synchronized内在锁对应的Lock实现以及和监视器模型中wait()和notify()/notifyAll()对应的Condition类及其awati()和signal()/signalAll()。至于后者的特点,后续文章详谈。
5、并发容器类和其它工具类。
前面的容器没有在并发角度上做太多考虑,那么在并发情况下,JUC给我们带来的好东西就是更加实用的CopyOnWriteArrayList、ConcurrentHashMap以及BlockingQueue的各类实现。除此之外,CountDownLatch、CyclicBarrier、Semaphore、Exchanger都是很实用的并发工具类。
6、Fork/join框架
7、TimeUtil工具
这个可以使用google的quart包里的工具代替
java.util.concurrent包的更多相关文章
- java.util.concurrent包API学习笔记
newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...
- 《java.util.concurrent 包源码阅读》 结束语
<java.util.concurrent 包源码阅读>系列文章已经全部写完了.开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码,一边 ...
- 《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包
Aomic数据类型有四种类型:AomicBoolean, AomicInteger, AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型, 还有一个特殊的A ...
- 《java.util.concurrent 包源码阅读》04 ConcurrentMap
Java集合框架中的Map类型的数据结构是非线程安全,在多线程环境中使用时需要手动进行线程同步.因此在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:Concu ...
- 《java.util.concurrent 包源码阅读》13 线程池系列之ThreadPoolExecutor 第三部分
这一部分来说说线程池如何进行状态控制,即线程池的开启和关闭. 先来说说线程池的开启,这部分来看ThreadPoolExecutor构造方法: public ThreadPoolExecutor(int ...
- 《java.util.concurrent 包源码阅读》17 信号量 Semaphore
学过操作系统的朋友都知道信号量,在java.util.concurrent包中也有一个关于信号量的实现:Semaphore. 从代码实现的角度来说,信号量与锁很类似,可以看成是一个有限的共享锁,即只能 ...
- 【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构
本文从JDK源码包中截取出concurrent包的所有类,对该包整体结构进行一个概述. 在JDK1.5之前,Java中要进行并发编程时,通常需要由程序员独立完成代码实现.当然也有一些开源的框架提供了这 ...
- java.util.concurrent包下集合类的特点与适用场景
java.util.concurrent包,此包下的集合都不允许添加null元素 序号 接口 类 特性 适用场景 1 Queue.Collection ArrayBlockingQueue 有界.阻塞 ...
- 高并发编程基础(java.util.concurrent包常见类基础)
JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...
随机推荐
- Tiffany
--名称:Tiffany&Co(蒂芙尼) --总部:美国,纽约 --历史:1837年创立 --产品:珠宝.手表. 配饰.礼品 --特点:品牌,质量,奢饰品
- Windows注册表(持续更新)
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Zoom 下, 设置DWORD 值 ZoomDisabled 等于 1.
- Android之Dialog详解
Android中的对话框形式大致可分为五种:分别是一般对话框形式,列表对话框形式,单选按钮对话框,多选按钮对话框,自定义对话框. 在实际开发中,用系统的对话框会很少,因为太丑了,美工不愿意,多是使用自 ...
- 使用第三方分页AspNetPager实现真正分页的SQL原理
AspNetPager是一个第三方分页第三方控件,可以和数据绑定控件(GridView等)方便的结合,实现真分页. 真分页:从数据库中获取符合要求的部分数目的记录.性能较高,数据量小,网络负载小,对数 ...
- SHELL 八大扩展
最近在梳理bash知识的的过程中,有幸阅读了man bash文档,一时间犹如醍醐灌顶一般,很多当初不明白的地方都豁然开朗,现在就其中的一点做一分享,同时也为man bash做一下广告,当你面对bash ...
- IOS常见的三种回调方法介绍
认识下三种IOS常见的回调模式. 代理模式作为IOS中最常见的通讯模式,代理几乎无处不在. 这里有一个数组,我们首先通过代理的方式将数组传递到其他方法中去. 设置协议及方法 @protocol Cal ...
- nsenter into docker. selinux(semanage,restorecon)
Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动了五个容器后,每个容器默认是没有配置SS ...
- MySQL-中文全文检索
一.概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度. 二.语法 1 2 MATCH (col1,col2,...) AGAINST (exp ...
- Windows下Memcache的安装与在php中使用
memcache dll插件和测试例子下载地址: http://pecl.php.net/package/memcache Windows下Memcache的安装方法 Memcached官方:http ...
- 是什么在.NET程序关闭时阻碍进程的退出?
在平时使用软件或是.NET程序开发的过程中,我们有时会遇到程序关闭后但进程却没有退出的情况,这往往预示着代码中有问题存在,不能正确的在程序退出时停止代码执行和销毁资源.这个现象有时并不容易被察觉,但在 ...