非阻塞式线程安全列表
来源:互联网 发布:石油钻井数据与油价 编辑:程序博客网 时间:2024/04/30 08:44
import java.util.concurrent.ConcurrentLinkedDeque;public class AddTask implements Runnable {private ConcurrentLinkedDeque<String> list;public AddTask(ConcurrentLinkedDeque<String> list) {this.list = list;}@Overridepublic void run() {String name = Thread.currentThread().getName();for(int i = 0; i < 10000; i++){list.add(name+":Element "+i);}}}import java.util.concurrent.ConcurrentLinkedDeque;public class PollTask implements Runnable {private ConcurrentLinkedDeque<String> list;public PollTask(ConcurrentLinkedDeque<String> list) {this.list = list;}@Overridepublic void run() {for(int i = 0; i < 5000; i ++) {/*String ele = list.pollFirst();if (ele == null) {System.out.println("取出元素为空");}ele = list.pollLast();if (ele == null) {System.out.println("取出元素为空");}*/System.out.println("取出:"+list.pollFirst());System.out.println("取出:"+list.pollLast());}}}import java.util.concurrent.ConcurrentLinkedDeque;public class Main {public static void main(String[] args) {// 共享集合ConcurrentLinkedDeque<String> list = new ConcurrentLinkedDeque<String>();// 执行集合元素添加任务Thread[] threads = new Thread[100];for (int i = 0; i < threads.length; i++) {AddTask addTask = new AddTask(list);threads[i] = new Thread(addTask);threads[i].start();}// 等待线程完成for (int i = 0; i < threads.length; i++) {try {threads[i].join();} catch (InterruptedException e) {e.printStackTrace();}}// 打印添加任务之后共享集合的元素大小System.out.println("Size of the List:" + list.size());// 执行集合取出任务for (int i = 0; i < threads.length; i++) {PollTask pollTask = new PollTask(list);threads[i] = new Thread(pollTask);threads[i].start();}// 等待线程完成for (int i = 0; i < threads.length; i++) {try {threads[i].join();} catch (InterruptedException e) {e.printStackTrace();}}// 打印添加任务之后共享集合的元素大小System.out.println("Size of the List:" + list.size());}}import java.util.concurrent.ConcurrentLinkedDeque;/** * 可以同时并发执行读写操作 * @author liujun * */public class Main2 {public static void main(String[] args) {// 共享集合ConcurrentLinkedDeque<String> list = new ConcurrentLinkedDeque<String>();// 执行集合元素添加任务Thread[] threads = new Thread[100];for (int i = 0; i < threads.length; i++) {AddTask addTask = new AddTask(list);threads[i] = new Thread(addTask);threads[i].start();}Thread[] threads2 = new Thread[100];// 执行集合取出任务for (int i = 0; i < threads2.length; i++) {PollTask pollTask = new PollTask(list);threads2[i] = new Thread(pollTask);threads2[i].start();}System.out.println("---------------");}}
0 0
- 非阻塞式线程安全列表
- 阻塞式线程安全列表
- 非阻塞线程安全列表——ConcurrentLinkedDeque应用举例
- Java并发编程-29-非阻塞式线程安全列表-ConcurrentLinkedDeque
- Java并发编程-30-阻塞式线程安全列表-LinkedBlockingDeque
- 非线程安全函数列表
- java并发实战第六章(2)非阻塞式线程安全列表与一般List集合多线程情况下的比较
- Java多线程之~~~线程安全容器的非阻塞容器
- java并发编程第六章(3)使用阻塞式线程安全列表
- java并发编程第六章(4)使用基于优先级的阻塞式线程安全列表
- java PriorityBlockingQueue——按优先级排序的阻塞式线程安全列表
- Java 线程安全:BlockingQueue(阻塞算法) VS ConcurrentLinkedQueue(非阻塞算法)
- 阻塞线程与非阻塞线程
- 非线程/线程安全
- 线程安全、非线程安全
- 并发,同步,异步,阻塞,非阻塞,线程
- performSelectorOnMainThread线程的阻塞与非阻塞
- 线程、进程、同步、异步、阻塞、非阻塞
- hive本地安装
- PHP进阶:删除文件
- 最近研究xcodebuild批量打包的一些心得
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- cmd下演示SQLite
- 非阻塞式线程安全列表
- 好基友的博客,顶一下,备份一下
- UITableView的段落设置 — 段头段尾高度
- [Leetcode][数论]Add Digits
- 人机大战之AlphaGo的硬件配置和算法研究
- PHP进阶:取得当前的Unix时间戳
- 敏捷开发之Scrum扫盲篇
- 使用appium进行ios测试,启动inspector时遇到的问题(一)
- Span 介绍及使用(一)