線程安全列表

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();
相關文章
相關標籤/搜索