Java并发编程-29-非阻塞式线程安全列表-ConcurrentLinkedDeque
来源:互联网 发布:300663科蓝软件 编辑:程序博客网 时间:2024/05/16 06:56
一、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异常
三、测试。向列表中添加和删除大量的元素
package com.concurrencycollection;import java.util.concurrent.ConcurrentLinkedDeque;/** * 添加大量的数据到一个列表 * @author Nicholas * */public class AddTask implements Runnable {private ConcurrentLinkedDeque<String> concurrentLinkedDeque;public AddTask(ConcurrentLinkedDeque<String> concurrentLinkedDeque) {this.concurrentLinkedDeque = concurrentLinkedDeque;}@Overridepublic void run() {String name = Thread.currentThread().getName();for (int i = 0; i < 10000; i++) {concurrentLinkedDeque.add(name + " : Element " + i);}}}package com.concurrencycollection;import java.util.concurrent.ConcurrentLinkedDeque;/** * 从这个列表移除大量的数据 * @author Nicholas * */public class PollTask implements Runnable{private ConcurrentLinkedDeque<String> concurrentLinkedDeque;public PollTask(ConcurrentLinkedDeque<String> concurrentLinkedDeque) {this.concurrentLinkedDeque = concurrentLinkedDeque;}@Overridepublic void run() {for (int i = 0; i < 5000; i++) {concurrentLinkedDeque.pollFirst();concurrentLinkedDeque.pollLast();}}}package com.concurrencycollection;import java.util.Map;import java.util.concurrent.ConcurrentLinkedDeque;import java.util.concurrent.ConcurrentNavigableMap;import java.util.concurrent.ConcurrentSkipListMap;public class Main {public void testConcurrentLinkedDeque() {ConcurrentLinkedDeque<String> concurrentLinkedDeque = new ConcurrentLinkedDeque<String>();Thread[] threads = new Thread[100];for (int i = 0; i < threads.length; i++) {AddTask addTask = new AddTask(concurrentLinkedDeque);threads[i] = new Thread(addTask);threads[i].start();}System.out.println("Main : AddTask threads have been launched..."+ threads.length);// 等待线程完成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 "+ concurrentLinkedDeque.size());for (int i = 0; i < threads.length; i++) {PollTask pollTask = new PollTask(concurrentLinkedDeque);threads[i] = new Thread(pollTask);threads[i].start();}System.out.println("Main : PollTask threads have been launched..."+ threads.length);// 等待线程完成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 "+ concurrentLinkedDeque.size());}public void testContact() {ConcurrentSkipListMap<String, Contact> concurrentSkipListMap = new ConcurrentSkipListMap<String, Contact>();Thread[] threads = new Thread[25];int counter = 0;for (char i = 'A'; i < 'Z'; i++) {Task task = new Task(concurrentSkipListMap, String.valueOf(i));threads[counter] = new Thread(task);threads[counter].start();counter++;}for (int i = 0; i < threads.length; i++) {try {threads[i].join();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("Main : Size of the map "+ concurrentSkipListMap.size());Map.Entry<String, Contact> elementEntry;Contact contact;elementEntry = concurrentSkipListMap.firstEntry();contact = elementEntry.getValue();System.out.println("Main : First Entry :" + contact);elementEntry = concurrentSkipListMap.lastEntry();contact = elementEntry.getValue();System.out.println("Main : Last Entry :" + contact);// 取得子映射System.out.println("Main : submap from A1996 to B1002:");ConcurrentNavigableMap<String, Contact> subMap = concurrentSkipListMap.subMap("A1996", "B1002");do {elementEntry = subMap.pollFirstEntry();if (elementEntry != null) {contact = elementEntry.getValue();System.out.println("Contact : " + contact);}} while (elementEntry != null);}public static void main(String[] args) {// new Main().testConcurrentLinkedDeque();new Main().testContact();}}
- Java并发编程-29-非阻塞式线程安全列表-ConcurrentLinkedDeque
- 非阻塞线程安全列表——ConcurrentLinkedDeque应用举例
- Java并发编程-30-阻塞式线程安全列表-LinkedBlockingDeque
- java并发编程第六章(3)使用阻塞式线程安全列表
- java并发编程第六章(4)使用基于优先级的阻塞式线程安全列表
- 非阻塞式线程安全列表
- java并发实战第六章(2)非阻塞式线程安全列表与一般List集合多线程情况下的比较
- 阻塞式线程安全列表
- Java并发编程-31-阻塞式优先级列表-PriorityBlockingQueue
- 并发,同步,异步,阻塞,非阻塞,线程
- Java多线程之~~~线程安全容器的非阻塞容器
- java并发编程实战第六章(5)使用带有延迟元素的线程安全列表
- Java并发编程之四:守护线程和线程阻塞
- 【Java并发编程实践】— 线程安全
- 【Java并发编程一】线程安全
- java并发编程基础之线程安全
- java并发编程实践_02线程安全
- Java并发编程实战2-线程安全
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第七课: Cocos2D-X引擎框架2
- Java基础 管道流 RandomAccessFile DataStream ByteArrayStream 字符编码
- 安卓学习笔记之activity生命周期
- c语言-Basic
- kettle学习笔记(一)
- Java并发编程-29-非阻塞式线程安全列表-ConcurrentLinkedDeque
- Android开发_获取手机屏幕的尺寸
- unix环境高级编程——进程状态
- 单例模式
- 最小生成树算法和最短路径算法的区别是什么?
- iOS中获取通讯录的方法
- nyoj 92 图像有用区域 【BFS】 【好题 】
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第八课: Cocos2D-X引擎框架3
- centos配置国内yum源