zoukankan      html  css  js  c++  java
  • LinkedBlockingQueue和ConcurrentLinkedQueue详细用法

    1.LinkedBlockingQueue<E>:java.util.concurrent

    API中的解释:

    1. public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable  

    一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多 数并发应用程序中,其可预知的性能要低。可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于 Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。

    适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。

    2.ConcurrentLinkedQueue<E>:java.util.concurrent
    API中的解释:

    1. public class ConcurrentLinkedQueue<E>extends AbstractQueue<E>implements Queue<E>, Serializable  

    一个基于链接节点的、无界的、线程安全的队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列检索操作从队列头部获得元素。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。此队列不允许 null 元素。

    扩展:

    并发编程中的一种编程方式是把任务拆分为一些的小任务,即Runnable,然后再提交给一个Executor执 行,Executor.execute(Runnable).Executor在执行时适用内部的线程池完成操作。Executor在执行时使用内部的线 程池完成操作。

    创建线程池:

    Executor executor = Executors.newFixedThreadPool(10);  //创建固定数目线程的线程池

    Executor executor = Executors.newCachedThreadPool();  //创建一个可缓存的线程池,调用execute将重用以前构造的线程(如线程可用)。如果现有线程没有可用的。则创建一个新的线程并添加到池中。

    ExecutorService与生命周期

    ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个 Executor的生命周期有三种状态,运行,关闭,终止。Executor创建时出于运行状态。当调用 ExecutorService.shutdown()后,出于关闭状态,isShutdown方法返回true。这时,不应该再想Executor中添 加任务,所有已添加的任务执行完毕后,Executor出于终止状态,IsTerminated()返回true.如果Executor处于关闭状态,往 Executor提交任务会抛出unchecked exception RejectedExecutionException.

    API中的解释:

    1. public interface ExecutorService extends Executor  

    Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。 可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。通过创建并返回一个可用于取消执行和/或等待完成的 Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAny invokeAll 是批量执行的最常用形式,它们执行任务集合,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService 类来编写这些方法的自定义变体)。Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。

    void shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。

    submit(Runnable task) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。

    原文:http://blog.csdn.net/ac903919/article/details/6967728

  • 相关阅读:
    控制器生命周期逻辑调用
    数据持久化
    Mac屏幕录制Gif
    iOS开发应用上架必读最新苹果审核规则
    过滤字符串中的非汉字、字母、数字
    文字加描边
    博客全局修改需求
    iOS Xcode12 运行iOS15系统程序卡在启动页要等很久才能进入主页
    macOS环境:安装Go(21-10-22完)
    关闭WIN10自动配置 IPV4 地址 169.254解决方法
  • 原文地址:https://www.cnblogs.com/langtianya/p/4393263.html
Copyright © 2011-2022 走看看