欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

所以当你发现一些 昆山软件定制开发 被漏掉的类或接口时

点击: 次  来源:宝鼎软件 时间:2017-09-02

原文出处: 高广超

译序

本指南按照 Jakob Jenkov 最新博客翻译,请随时存眷博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html。

本指南已做成中英文比较阅读版的 pdf 文档,有乐趣的伴侣可以去 Java并发东西包java.util.concurrent用户指南中英文比较阅读版.pdf[带书签] 举办下载。

1. java.util.concurrent – Java 并发东西包

Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包括有一系列可以或许让 Java 的并发编程变得越发简朴轻松的类。在这个包被添加以前,你需要本身去动手实现本身的相关东西类。

本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以实验着如安在项目中利用它们。本文中我将利用 Java 6 版本,我不确定这和 Java 5 版本里的是否有一些差别。我不会去表明关于 Java 并发的焦点问题 – 其背后的道理,也就是说,假如你对那些对象感乐趣,参考《Java 并发指南》。

半制品

本文很洪流平上照旧个 “半制品”,所以当你发明一些被遗漏的类或接口时,请耐性期待。在我空闲的时候会把它们加进来的。

2. 阻塞行列 BlockingQueue

java.util.concurrent 包里的 BlockingQueue 接口暗示一个线程安顿入和提取实例的行列。本小节我将给你演示如何利用这个 BlockingQueue。本节不会接头如安在 Java 中实现一个你本身的 BlockingQueue。假如你对谁人感乐趣,参考《Java 并发指南》

BlockingQueue 用法

BlockingQueue 凡是用于一个线程出产工具,而别的一个线程消费这些工具的场景。下图是对这个道理的叙述:

所以当你发明一些 昆山软件定制开拓 被遗漏的类或接口时

一个线程往里边放,别的一个线程从里边取的一个 BlockingQueue。

一个线程将会一连出产新工具并将其插入到行列之中,直到行列到达它所能容纳的临界点。也就是说,它是有限的。假如该阻塞行列达到了其临界点,认真出产的线程将会在往里边插入新工具时产生阻塞。它会一直处于阻塞之中,直到认真消费的线程从行列中拿走一个工具。认真消费的线程将会一直从该阻塞行列中拿出工具。假如消费线程实验去从一个空的行列中提取工具的话,这个消费线程将会处于阻塞之中,直到一个出产线程把一个工具丢举办列。

BlockingQueue 的要领

BlockingQueue 具有 4 组差异的要领用于插入、移除以及对行列中的元素举办查抄。假如请求的操纵不能获得当即执行的话,每个要领的表示也差异。这些要领如下:

所以当你发明一些 昆山软件定制开拓 被遗漏的类或接口时

四组差异的行为方法表明:

抛异常:假如试图的操纵无法当即执行,抛一个异常。
特定值:假如试图的操纵无法当即执行,返回一个特定的值(经常是 true / false)。
阻塞:假如试图的操纵无法当即执行,该要领挪用将会产生阻塞,直到可以或许执行。
超时:假如试图的操纵无法当即执行,该要领挪用将会产生阻塞,直到可以或许执行,但期待时间不会高出给定值。返回一个特定值以奉告该操纵是否乐成(典范的是 true / false)。

无法向一个 BlockingQueue 中插入 null。假如你试图插入 null,BlockingQueue 将会抛出一个 NullPointerException。

可以会见到 BlockingQueue 中的所有元素,而不只仅是开始和竣事的元素。好比说,你将一个工具放入行列之中以期待处理惩罚,但你的应用想要将其打消掉。那么你可以挪用诸如 remove(o) 要领来将行列之中的特定工具举办移除。可是这么干效率并不高(译者注:基于行列的数据布局,获取除开始或竣事位置的其他工具的效率不会太高),因此你只管不要用这一类的要领,除非你确实不得不那么做。

BlockingQueue 的实现

BlockingQueue 是个接口,你需要利用它的实现之一来利用 BlockingQueue。java.util.concurrent 具有以下 BlockingQueue 接口的实现(Java 6):

  • ArrayBlockingQueue
  • DelayQueue
  • LinkedBlockingQueue
  • PriorityBlockingQueue
  • SynchronousQueue
  • Java 中利用 BlockingQueue 的例子

    这里是一个 Java 中利用 BlockingQueue 的示例。本示例利用的是 BlockingQueue 接口的 ArrayBlockingQueue 实现。

    首先,BlockingQueueExample 种别离在两个独立的线程中启动了一个 Producer 和 一个 Consumer。

    Producer 向一个共享的 BlockingQueue 中注入字符串,而 Consumer 则会从中把它们拿出来。

    public class BlockingQueueExample {  
    
        public static void main(String[] args) throws Exception {  
    
            BlockingQueue queue = new ArrayBlockingQueue(1024);  
    
            Producer producer = new Producer(queue);  
            Consumer consumer = new Consumer(queue);  
    
            new Thread(producer).start();  
            new Thread(consumer).start();  
    
            Thread.sleep(4000);  
        }  
    }