非阻塞式线程安全列表-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()时, 该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务. 因 ...
随机推荐
- 一张图解析nvm,npm,nodejs之间的关系
- 20155323 2016-2017-2 《Java程序设计》第5周学习总结
20155323 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 异常处理 提供两种异常处理机制:捕获异常和声明抛弃异常. 捕获异常:在Java程序运行过程中 ...
- WPF之路二: button添加背景图片点击后图片闪烁问题
在为button添加背景图片的时候,点击后发现图片闪烁,我们仔细观察,其实Button不仅仅只是在点击后会闪烁,在其通过点击或按Tab键获得焦点后都会闪烁,而通过点击其他按钮或通过按Tab键让Butt ...
- js随机模块颜色
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- Mac系统-java环境搭建_01
一.安装jdk 下载地址:http://www.oracle.com/technetwork/Java/javase/downloads/index-jsp-138363.html 1.傻瓜式安装下一 ...
- Git安装与上传代码至Github
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6642887.html 这篇文章应该是全网最新,最全,最靠谱的Github安装到上传代码的流程. 1.Git ...
- [编织消息框架][JAVA核心技术]动态代理应用9-扫描class
之前介绍的annotationProcessor能在编译时生成自定义class,但有个缺点,只能每次添加/删除java文件才会执行,那天换了个人不清楚就坑大了 还记得之前介绍的编译时处理,懒处理,还有 ...
- php常用的优化手段
由于工作码成狗,抽闲整理了下内容,以下是网上流传比较广泛的30种SQL查询语句优化方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. ...
- Java实现Android,iOS设备实时监控
Java实现Android设备实时监控 设计思路: 第一,启动一个实时截图线程,负责实时截取Android设备屏幕,保存到本地路径. 第二,在JSP页面,定义一个img对象,实时更换img对象的src ...
- SparkStreaming官方示例程序运行方式
一.前置条件 安装NetCat(有“瑞士军刀”之称,简称nc),输入如下命令: yum install -y nc 二.方式一:直接运行官方Example 2.1 打开一个shell,输入命令:nc ...