zoukankan      html  css  js  c++  java
  • 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给我们带来的好东西就是更加实用的CopyOnWriteArrayListConcurrentHashMap以及BlockingQueue的各类实现。除此之外,CountDownLatchCyclicBarrierSemaphoreExchanger都是很实用的并发工具类。

    6、Fork/join框架

      

    7、TimeUtil工具

      这个可以使用google的quart包里的工具代替

     

  • 相关阅读:
    安装 pptpd 服务
    profile bashrc bash_profile 之间的区别和联系
    11款基于Javascript的文件管理器
    C/C++学习之static_cast和dynamic_cast、reinterpret_cast
    VS.Net中程序集的Debug版本和Release版本的区别
    .net4.0以下的CookieContainer存在一个bug.即主域和子域cookie互访有问题。
    学习C# delegate和C# event
    使用log4net记录日志到数据库(含有自定义属性)
    c#获取本机ip地址|获取本机的本地上网IP地址
    Java 跨语言实现方案
  • 原文地址:https://www.cnblogs.com/549294286/p/3825001.html
Copyright © 2011-2022 走看看