1、非阻塞式線程安全列表 ConcurrentLinkedDequejava
ConcurrentLinkedDeque<String> deque = new ConcurrentLinkedDeque<>(); for (int i=0;i<10;i++){ Thread t1 = new Thread(() -> { for (int j = 0; j < 10000; j++) { deque.add(String.valueOf(j)); } }); t1.start(); t1.join(); } System.out.println(deque.size()); //100000
deque.getFirst(); deque.getLast();
//返回列表中的第一個和最後一個。元素不會被移除,若是列表爲空將拋出NoSuchElementException安全
deque.peek();deque.peekFirst();deque.peekLast();
//返回中第一個和最後一個,元素不會被移除,若是列表爲空返回null數據結構
deque.pollLast();deque.pollFirst();
//返回列表中第一個和最後一個,並移除元素。不會拋出異常併發
deque.remove();deque.removeFirst();deque.removeLast();
//返回第一個和最後一個,並移除元素。列表爲空將拋出異常dom
2、阻塞式線程列表線程
LinkedBlockingDeque<String> blockingDeque = new LinkedBlockingDeque<>();
阻塞與非阻塞的主要區別:阻塞式列表在插入和刪除操做時,若是列表已滿或爲空,操做不被當即執行,而是將調用這個操做的線程阻塞
直到操做能夠執行成功。
code
3、按優先級排序的阻塞式線程安全列表 PriorityBlockingQueue排序
PriorityBlockingQueue<String> blockingQueue = new PriorityBlockingQueue<>();
PriorityBlockingQueue 中的每一個元素都要實現 Comparable接口。元素越大越靠後接口
特性:它是阻塞數據結構。當它的方法被調用而且不能當即執行時,調用這個方法的線程將被阻塞直到方法執行成功。rem
4、帶延遲元素的線程安全列表
DelayQueue<Delayed> delayQueue = new DelayQueue<>();
1.它能夠存放帶有激活日期的元素,當從該列表取取值時,將來的元素將被忽略
2.它的元素必須實現 Delayed 接口
5、併發隨機數 ThreadLocalRandom
ThreadLocalRandom.current().nextInt();