Sample code for the ConcurrentLinkedQueue of the java collection
This article shares with you the content of the sample code for the ConcurrentLinkedQueue of the java collection. The editor thinks it is very practical, so share it with you as a reference and follow the editor to have a look.
problem
(1) is ConcurrentLinkedQueue a blocking queue?
(2) how does ConcurrentLinkedQueue ensure concurrency security?
(3) can ConcurrentLinkedQueue be used in thread pools?
Brief introduction
ConcurrentLinkedQueue implements only the Queue interface, not the BlockingQueue interface, so it is not a blocking queue and cannot be used in thread pools, but it is thread-safe and can be used in multithreaded environments.
So, how is its thread safety achieved? Let's have a look together.
Source code analysis main attribute / / chain header node private transient volatile Node head;// chain list tail node private transient volatile Node tail
There are only two main attributes, a header node and a tail node.
Main inner class private static class Node {volatile E item; volatile Node next;}
Typical single linked list structure, very pure.
The main construction method public ConcurrentLinkedQueue () {/ initialize the header and tail node head = tail = new Node (null);} public ConcurrentLinkedQueue (Collection)