一、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. Sublime Text 3常用插件

    操作:按下Ctrl+Shift+P调出命令面板 输入install 调出 Install Package 选项并回车,然后在列表中选中要安装的插件. 常用插件: 1---- Bracket Highl ...

  2. iOS 文本转语音(TTS)详解:Swift

    上一篇博客讲解了iOS的speech FrameWork语音识别的功能:http://www.cnblogs.com/qian-gu-ling/p/6599670.html,对应的这篇博客就写一下文本 ...

  3. JS中的异步以及事件轮询机制

    一.JS为何是单线程的? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊.(在JAVA和c#中的异步 ...

  4. css实现下拉菜单

    实现一个效果不难,难的是使用最少的代码实现一个效果 <!DOCTYPE html> <html lang="en"> <head> <me ...

  5. JDBC连接Oracle数据库代码

    import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...

  6. [SinGuLaRiTy] 高精度算法代码库

    [SinGuLaRiTy-1001] Copyrights (c) SinGuLaRiTy 2017. All Rights Reserved. 加法: #include<stdio.h> ...

  7. 性能调优:mysql之left join

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  8. 性能调优之SQL优化

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  9. Opencv4android的Android Studio项目配置及实例下载

    因为软件竞赛的项目会用到Opencv fo rAndroid,所以就研究了一下如何在Android Studio上配置Opencv4Android 环境概述: Android Studio 2.3 O ...

  10. webpack搭建服务器,随时修改刷新

    前提:1.对webpack有一定了解,本文不做介绍 2.安装node.js 手把手操作: 1.创建一个名为webpack-server的文件夹(随便取的) 2.cd到当前文件夹:cd webpack- ...