非阻塞式线程安全列表-ConcurrentLinkedDeque
一、ConcurrentLinkedDeque
- public class ConcurrentLinkedDeque<E>
- extends AbstractCollection<E>
- 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的更多相关文章
- Java基础——NIO(二)非阻塞式网络通信与NIO2新增类库
一.NIO非阻塞式网络通信 1.阻塞与非阻塞的概念 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在 ...
- Swing做的非阻塞式仿飞秋聊天程序
采用Swing 布局 NIO非阻塞式仿飞秋聊天程序, 切换皮肤颜色什么的小功能以后慢慢做 启动主程序. 当用户打开主程序后自动获取局域网段IP可以在 设置 --> IP网段过滤, 拥有 JMF ...
- 阻塞式和非阻塞式IO
有很多人把阻塞认为是同步,把非阻塞认为是异步:个人认为这样是不准确的,当然从思想上可以这样类比,但方式是完全不同的,下面说说在JAVA里面阻塞IO和非阻塞IO的区别 在JDK1.4中引入了一个NIO的 ...
- Java IO(3)非阻塞式输入输出(NIO)
在上篇<Java IO(2)阻塞式输入输出(BIO)>的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解.现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端 ...
- Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别
1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...
- 为什么IO多路复用需要采用非阻塞式IO
近段时间开始学习<Unix网络编程>,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述 ...
- 非阻塞式I/O
套接字的默认状态是阻塞的.这就意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待相应的操作完成.可能阻塞的套接字调用可分为以下4类 (1)输入操作,包括read,readv,recv ...
- 4.NIO的非阻塞式网络通信
/*阻塞 和 非阻塞 是对于 网络通信而言的*/ /*原先IO通信在进行一些读写操作 或者 等待 客户机连接 这种,是阻塞的,必须要等到有数据被处理,当前线程才被释放*/ /*NIO 通信 是将这个阻 ...
- NIO 的非阻塞式网络通信
1.阻塞与非阻塞 ① 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write()时, 该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务. 因 ...
随机推荐
- 微信小程序已经开放个人开发者申请了,还不快上车?
前言 就在昨天(3月27号),微信公众号平台推送了文章"小程序新能力",这篇文章是广大开发者的福音.个人开发者可申请小程序!!! 小程序开放个人开发者申请注册,个人用户可访问微信公 ...
- Apache Storm 1.1.0 发布概览
写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...
- https证书申请流程和简介
HTTPS证书是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安 ...
- Python javascript操作DOM
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- JavaEE开发使用Maven管理的SpringMVC工程
前几篇博客已经陆陆续续的聊了一些Spring的东西,今天博客我们就来聊一下SpringMVC.SpringMVC目前在JavaEE开发中可谓占据一席之地,用起来也是比较顺手的.低耦合,高内聚,利用一些 ...
- SqlDataReader生成动态Lambda表达式
上一扁使用动态lambda表达式来将DataTable转换成实体,比直接用反射快了不少.主要是首行转换的时候动态生成了委托. 后面的转换都是直接调用委托,省去了多次用反射带来的性能损失. 今天在对Sq ...
- 基础:获得servletAPI
package com.learning.web.action; import javax.servlet.ServletContext; import javax.servlet.http.Http ...
- 2.Ubuntu16.04安装QT5.8.0
VSCode编辑器开发CPP:http://www.cnblogs.com/dotnetcrazy/p/6661921.html 下载QT run文件(安装包),一般都是这两个下载的比较多,我这边使用 ...
- mysql数据库实操笔记20170418
一.建立商品分类表和价格表: 1.分类表`sankeq``sankeq`CREATE TABLE cs_mysql11(id INT(11) NOT NULL AUTO_INCREMENT,categ ...
- java面试题(一)
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...