一、ConcurrentLinkedDeque

  1. public class ConcurrentLinkedDeque<E>
  2. extends AbstractCollection<E>
  3. implements Deque<E>, java.io.Serializable

二、主要的方法

  • public E pollFirst():返回并移除第一个元素。如果列表为空,抛出NoSuchElementException异常
  • public E pollLast():返回并移除最后一个元素。如果列表为空,抛出NoSuchElementException异常
  • public E poll():返回并移除第一个元素。如果列表为空,抛出NoSuchElementException异常
  • public E getFirst():返回但不移除第一个元素。如果列表为空,抛出NoSuchElementException异常
  • public E getLast():返回但不移除最后一个元素。如果列表为空,抛出NoSuchElementException异常
  • public E peek():返回并移除第一个元素。如果列表为空,抛出NullPointerException异常
  • public E peekFirst():返回并移除第一个元素。如果列表为空,抛出NullPointerException异常
  • public E peekLast():返回并移除最后一个元素。如果列表为空,抛出NullPointerException异常
  • public E removeFirst():返回并移除第一个元素。如果列表为空,抛出NoSuchElementException异常
  • public boolean remove(Object o):返回并移除第一个元素。如果列表为空,抛出NoSuchElementException异常
  • public E removeLast():返回并移除最后一个元素。如果列表为空,抛出NoSuchElementException异常
public class AddTask implements Runnable {
private ConcurrentLinkedDeque<String> linkedDeque;
public AddTask(ConcurrentLinkedDeque<String> linkedDeque) {
super();
this.linkedDeque = linkedDeque;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 10000; i++) {
linkedDeque.add(name + ": Element " + i);
}
}
}
public class PollTask implements Runnable {
private ConcurrentLinkedDeque<String> linkedDeque;
public PollTask(ConcurrentLinkedDeque<String> linkedDeque) {
super();
this.linkedDeque = linkedDeque;
}
@Override
public void run() {
for (int i = 0; i < 5000; i++) {
linkedDeque.pollFirst();
linkedDeque.pollLast();
}
}
}
public class ConcurrentLinkedDequeMain {
public static void main(String[] args) {
ConcurrentLinkedDeque<String> linkedDeque = new ConcurrentLinkedDeque<String>();
Thread threads[] = new Thread[100];
for (int i = 0; i < threads.length; i++) {
AddTask task = new AddTask(linkedDeque);
threads[i] = new Thread(task);
threads[i].start();
}
System.out.println("Main:"+threads.length+" AddTask Threads has Launched");
for (int i = 0; i < threads.length; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Main: Size of the List:" + linkedDeque.size()); Thread threads2[] = new Thread[100];
for (int i = 0; i < threads2.length; i++) {
PollTask task = new PollTask(linkedDeque);
threads2[i] = new Thread(task);
threads2[i].start();
}
System.out.println("Main:" + threads2.length+ " PollTask Threads has Launched");
for (int i = 0; i < threads2.length; i++) {
try {
threads2[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Main: Size of the List:" + linkedDeque.size());
}
}
Main:100 AddTask Threads has Launched
Main: Size of the List:1000000
Main:100 PollTask Threads has Launched
Main: Size of the List:0

非阻塞式线程安全列表-ConcurrentLinkedDeque的更多相关文章

  1. Java基础——NIO(二)非阻塞式网络通信与NIO2新增类库

    一.NIO非阻塞式网络通信 1.阻塞与非阻塞的概念  传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在 ...

  2. Swing做的非阻塞式仿飞秋聊天程序

    采用Swing 布局 NIO非阻塞式仿飞秋聊天程序, 切换皮肤颜色什么的小功能以后慢慢做 启动主程序. 当用户打开主程序后自动获取局域网段IP可以在 设置 --> IP网段过滤, 拥有 JMF ...

  3. 阻塞式和非阻塞式IO

    有很多人把阻塞认为是同步,把非阻塞认为是异步:个人认为这样是不准确的,当然从思想上可以这样类比,但方式是完全不同的,下面说说在JAVA里面阻塞IO和非阻塞IO的区别 在JDK1.4中引入了一个NIO的 ...

  4. Java IO(3)非阻塞式输入输出(NIO)

    在上篇<Java IO(2)阻塞式输入输出(BIO)>的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解.现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端 ...

  5. Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别

    1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...

  6. 为什么IO多路复用需要采用非阻塞式IO

    近段时间开始学习<Unix网络编程>,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述 ...

  7. 非阻塞式I/O

    套接字的默认状态是阻塞的.这就意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待相应的操作完成.可能阻塞的套接字调用可分为以下4类 (1)输入操作,包括read,readv,recv ...

  8. 4.NIO的非阻塞式网络通信

    /*阻塞 和 非阻塞 是对于 网络通信而言的*/ /*原先IO通信在进行一些读写操作 或者 等待 客户机连接 这种,是阻塞的,必须要等到有数据被处理,当前线程才被释放*/ /*NIO 通信 是将这个阻 ...

  9. NIO 的非阻塞式网络通信

    1.阻塞与非阻塞   ①  传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write()时, 该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务. 因 ...

随机推荐

  1. 微信小程序已经开放个人开发者申请了,还不快上车?

    前言 就在昨天(3月27号),微信公众号平台推送了文章"小程序新能力",这篇文章是广大开发者的福音.个人开发者可申请小程序!!! 小程序开放个人开发者申请注册,个人用户可访问微信公 ...

  2. Apache Storm 1.1.0 发布概览

    写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...

  3. https证书申请流程和简介

    HTTPS证书是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安 ...

  4. Python javascript操作DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  5. JavaEE开发使用Maven管理的SpringMVC工程

    前几篇博客已经陆陆续续的聊了一些Spring的东西,今天博客我们就来聊一下SpringMVC.SpringMVC目前在JavaEE开发中可谓占据一席之地,用起来也是比较顺手的.低耦合,高内聚,利用一些 ...

  6. SqlDataReader生成动态Lambda表达式

    上一扁使用动态lambda表达式来将DataTable转换成实体,比直接用反射快了不少.主要是首行转换的时候动态生成了委托. 后面的转换都是直接调用委托,省去了多次用反射带来的性能损失. 今天在对Sq ...

  7. 基础:获得servletAPI

    package com.learning.web.action; import javax.servlet.ServletContext; import javax.servlet.http.Http ...

  8. 2.Ubuntu16.04安装QT5.8.0

    VSCode编辑器开发CPP:http://www.cnblogs.com/dotnetcrazy/p/6661921.html 下载QT run文件(安装包),一般都是这两个下载的比较多,我这边使用 ...

  9. mysql数据库实操笔记20170418

    一.建立商品分类表和价格表: 1.分类表`sankeq``sankeq`CREATE TABLE cs_mysql11(id INT(11) NOT NULL AUTO_INCREMENT,categ ...

  10. java面试题(一)

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...