在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包的更多相关文章

  1. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  2. 《java.util.concurrent 包源码阅读》 结束语

    <java.util.concurrent 包源码阅读>系列文章已经全部写完了.开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码,一边 ...

  3. 《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包

    Aomic数据类型有四种类型:AomicBoolean, AomicInteger, AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型, 还有一个特殊的A ...

  4. 《java.util.concurrent 包源码阅读》04 ConcurrentMap

    Java集合框架中的Map类型的数据结构是非线程安全,在多线程环境中使用时需要手动进行线程同步.因此在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:Concu ...

  5. 《java.util.concurrent 包源码阅读》13 线程池系列之ThreadPoolExecutor 第三部分

    这一部分来说说线程池如何进行状态控制,即线程池的开启和关闭. 先来说说线程池的开启,这部分来看ThreadPoolExecutor构造方法: public ThreadPoolExecutor(int ...

  6. 《java.util.concurrent 包源码阅读》17 信号量 Semaphore

    学过操作系统的朋友都知道信号量,在java.util.concurrent包中也有一个关于信号量的实现:Semaphore. 从代码实现的角度来说,信号量与锁很类似,可以看成是一个有限的共享锁,即只能 ...

  7. 【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构

    本文从JDK源码包中截取出concurrent包的所有类,对该包整体结构进行一个概述. 在JDK1.5之前,Java中要进行并发编程时,通常需要由程序员独立完成代码实现.当然也有一些开源的框架提供了这 ...

  8. java.util.concurrent包下集合类的特点与适用场景

    java.util.concurrent包,此包下的集合都不允许添加null元素 序号 接口 类 特性 适用场景 1 Queue.Collection ArrayBlockingQueue 有界.阻塞 ...

  9. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

随机推荐

  1. json+mvc

    返回JsonResult序列化的Json对象 public class MyController : Controller {    // 必须返回ActionResult类型     public ...

  2. 转载:C/C++源代码到可执行程序的过程详解

    C/C++源代码到可执行程序的过程详解 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格 ...

  3. javaWeb中struts开发——helloworld

    1.新建一个web项目 2.选中project,右键,选择MyElcipse,选择add  struts capab...添加struts支持,然后自己命名包 3.Struts在建立jsp时,标签要到 ...

  4. 函数式编程Map()&Reduce()

    .forEach():每个元素都调用指定函数,可传三个参数:数组元素丶元素索引丶数组本身丶 , , , , , , , ]; a.forEach(function(v,i,a){a[i]=v+;}); ...

  5. SQL代码创建表例子

    create table class ( code ) primary Key, name ) ); create table student ( code ) primary Key, name ) ...

  6. angularJS平行控制器间共享数据

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. .Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示

    xUtils注入和图片显示 一.xUtils注入 引用官方介绍: ViewUtils模块: •android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定: •新的事件绑定方式,使用混淆工 ...

  8. PM2的使用

    PM2 是一个带有负载均衡功能的 Node 应用的进程管理器. 安装 npm install -g pm2 启动程序:pm2 start <app_name|id|all> 列举进程:pm ...

  9. 判断webkit中的js引擎是否是v8

    <html><head></head><body><script type="text/javascript">  if ...

  10. Android Lint简介(转)

    转载自原文:http://blog.csdn.net/hudashi/article/details/8333349,感谢原作者. 英文原文:http://tools.android.com/tips ...