当前位置: 首页 > news >正文

朔州市网站建设_网站建设公司_JSON_seo优化

小型企业类网站开发公司,平板电脑网站模板,页面紧急情况访问升级跳转,湖南常德米粉转载自 非阻塞线程安全列表——ConcurrentLinkedDeque应用举例 在java中,最常用的数据结构可能是列表。有数目不详的元素列表,你可以添加、阅读、或删除任何位置的元素。此外,并发列表允许不同的线程列表中添加或删除元素时不产生任何数据不一致。非阻塞列表提供如下操作,如果…转载自  非阻塞线程安全列表——ConcurrentLinkedDeque应用举例 在java中,最常用的数据结构可能是列表。有数目不详的元素列表,你可以添加、阅读、或删除任何位置的元素。此外,并发列表允许不同的线程列表中添加或删除元素时不产生任何数据不一致。非阻塞列表提供如下操作,如果操作不能立即完成,列出抛出异常或者返回一个null值。Java 7中引入了ConcurrentLinkedDeque类,它实现了一个非阻塞并发列表在本教程中,我们将学习使用这个类。 在这个例子中,我们将实现一个示例使用以下两个不同的任务: 一个将大量数据添加到一个列表中        一个大量地从同样的列表中删除数据       让我们为每个任务创建的线程 package com.howtodoinjava.demo.multithreading.concurrentLinkedDequeExample; import java.util.concurrent.ConcurrentLinkedDeque; public class AddTask implements Runnable { private ConcurrentLinkedDequeString list; public AddTask(ConcurrentLinkedDequeString list) { this.list list; } Override public void run() { String name Thread.currentThread().getName(); for (int i 0; i 10000; i) { list.add(name : Element i); } } } 和 packagecom.howtodoinjava.demo.multithreading.concurrentLinkedDequeExample;importjava.util.concurrent.ConcurrentLinkedDeque;publicclass RemoveTask implementsRunnable {privateConcurrentLinkedDequeString list;publicRemoveTask(ConcurrentLinkedDequeString list) {this.list list;}Overridepublicvoid run() {for(inti 0; i 5000; i) {list.pollFirst();list.pollLast();}} } 现在,让我们创建100个线程将数据添加到列表和100个线程从列表删除数据。如果真的是线程安全的和非阻塞,它会几乎立即给你最终结果。此外,列表大小最终将是零。 package com.howtodoinjava.demo.multithreading.concurrentLinkedDequeExample; import java.util.concurrent.ConcurrentLinkedDeque; public class Main { public static void main(String[] args) { ConcurrentLinkedDequeString list new ConcurrentLinkedDeque(); Thread threads[] new Thread[100]; for (int i 0; i threads.length; i) { AddTask task new AddTask(list); threads[i] new Thread(task); threads[i].start(); } System.out.printf(Main: %d AddTask threads have been launched\n, threads.length); for (int i 0; i threads.length; i) { try { threads[i].join(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.printf(Main: Size of the List: %d\n, list.size()); for (int i 0; i threads.length; i) { RemoveTask task new RemoveTask(list); threads[i] new Thread(task); threads[i].start(); } System.out.printf(Main: %d RemoveTask threads have been launched\n, threads.length); for (int i 0; i threads.length; i) { try { threads[i].join(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.printf(Main: Size of the List: %d\n, list.size()); } } Output:   Main: 100 AddTask threads have been launched   Main: Size of the List: 1000000   Main: 100 RemoveTask threads have been launched   Main: Size of the List: 0   让我们看看它如何工作: 首先,你执行100个 AddTask任务将元素添加到任务列表。每一个任务使用 add()方法插入10000个元素到列表新增加的元素都会放到列表最后。当所有这些任务已经完成了,你会在控制台打印出了列表的元素数量。这时,这个列表有1000000个元素。然后,你执行100个 RemoveTask任务将元素从列表中删除。每一个任务删除这个列表 用pollFirst()和pollLast()方法。pollFirst()方法返回和删除列表的第一个元素和pollLast()方法返回和删除最后一个元素的列表。如果列表为空,这些方法返回一个null值。当所有这些任务已经完成了,在控制台的打印出列表中元素的数量这时,有零元素列表。打印列表的元素的数量时,你使用了 size()方法你必须考虑,这种方法并不是真实的,特别是如果你使用它在线程进行列表中添加同时又删除数据。计数的方法遍历整个列表的元素和内容列表可以改变这个操作。一旦在你使用它们时没有任何线程修改列表,你可以保证返回的结果是正确的。 请注意, ConcurrentLinkedDeque类提供了更多的方法来获取元素列表形式: getFirst()和 getLast():这些方法返回分别从列表中第一个和最后一个元素。他们不会从列表中删除返回的元素。如果列表是空的,这些方法抛出一个 NoSuchElementExcpetion例外。peek(), peekFirst(), peekLast():这些方法返回列表的第一个和最后一个元素。他们不会从列表中删除返回的元素。如果列表为空,这些方法返回一个null值。remove(), removeFirst(), removeLast():这些方法返回列表的第一个和最后一个元素。他们从列表中移除返回的元素。如果列表是空的,这些方法抛出一个 NoSuchElementException例外。一个 ConcurrentLinkedDeque是一个合适的选择,许多线程共享访问公共集合。像大多数其他并发集合实现,这个类不允许null元素的使用。迭代器是弱一致的,返回元素反映在一些点或双端队列的状态,因为迭代器的创建。他们不把ConcurrentModificationException与其他操作,可以同时进行。
http://www.lebaoying.cn/news/36830.html

相关文章:

  • 安卓手机如何做网站win10 wordpress安装
  • seo优化文章网站网站现在如何做推广
  • 绵阳的网站建设公司成品网站源码的优化技巧
  • 百度收录哪些网站吗天津建设执业资格注册中心网站
  • 做公司网站需要什么程序如何选择做网站
  • 做怎样的企业网站东莞市网站开发
  • 崇信县门户网站官网郑州企业网站托管公司
  • 规划网站总结网站推广策略与问题分析
  • wordpress 做影视站wordpress 博客搬家
  • 网站建设服务器的配置wordpress简历
  • 个人网站可以做淘宝客惠州市住房和城乡规划建设局官方网站
  • 江西网站制作公司哪些企业需要网络推广
  • 一个设计网站多少钱长沙app定制开发
  • 山东济宁网站建设西安网站建设软件
  • 有哪些网站建设工作注册一个公司的流程
  • 公司网页网站建设ppt模板下载义乌市建设局官方网站
  • 网站设计风格有哪些计算机网站开发图片
  • 我的世界查询建筑网站网站建设 今晟网络
  • 网站怎么做appWordPress tag 分类
  • 百度广告投放平台广州seo服务
  • 重庆网站建设公司是什么意思icp备案有效期几年
  • 比特币网站建设网站开发的技术路线
  • 那个网站做h5好有前景的网站建设
  • 安阳360网站推广工具专门做三国战纪的网站叫什么
  • 现在有哪些网站兼职可以做网站设计怎么保持风格一致
  • 网站建设的实验小结高端品牌网站定制设计
  • 深圳营销型网站建设服务商拼多多流量推广神器
  • wordpress建站怎么学资讯网站开发的背景
  • 网站备案 时间更新建筑企业上市公司有哪些
  • 不知道我自己的网站的ftp账号青岛商家都上什么网站