Rabu, 25 Juni 2014

Top 5 Concurrent Collections from JDK 5 and 6 Java Programmer Should Know




Several new Collection classes are added in Java 5 and Java 6 specially concurrent
alternatives of standard synchronized
ArrayList
, Hashtable
and  synchronized
HashMap
collection classes. Many Java programmer still not familiar with
these new collection classes from
java.util.concurrent package and
misses a whole new set of functionality which can be utilized to build more
scalable and high performance Java application. In this Java tutorial we will
some of useful collection classes e.g. ConcurrentHashMap,
BlockingQueue
which provides some of the very useful functionalities to build concurrent Java application. By the way this is not a comprehensive article explaining each
feature of all these concurrent collections, Instead I will just try to list
out why they are there, which Collection class they replace or provides
alternative for. Idea is to keep it short and simple while highlighting key
points of those useful
java.util.concurrent collections.







1.
ConcurrentHashMap


Java Concurrent Collections from JDK 5 and 6 Example TutorialConcurrentHashMap is undoubtedly most popular collection class introduced
in Java 5 and most of us are already using it.
ConcurrentHashMap provides a
concurrent alternative of Hashtable
or Synchronized Map
classes with aim to support higher level of concurrency
by implementing fined grained locking. Multiple reader can access the Map
concurrently  while a portion of Map gets
locked for write operation depends upon concurrency level of Map.
ConcurrentHashMap provides
better scalability than there synchronized counter part. Iterator
of
ConcurrentHashMap are fail-safe
iterators
which doesn't throw
ConcurrencModificationException thus
eliminates another requirement of locking during iteration which result in
further scalability and performance.








2.
CopyOnWriteArrayList and CopyOnWriteArraySet


CopyOnWriteArrayList is a concurrent alternative
of synchronized List.
CopyOnWriteArrayList provides better concurrency
than synchronized List by allowing multiple concurrent reader and replacing the
whole list on write operation. Yes, write operation is costly on
CopyOnWriteArrayList but it
performs better when there are multiple reader and requirement of iteration is
more than writing. Since
CopyOnWriteArrayList Iterator also don't throw ConcurrencModificationException it
eliminates need to lock the collection during iteration. Remember both
ConcurrentHashMap and CopyOnWriteArrayList doesn't
provides same level of locking as Synchronized Collection and achieves thread-safety
by
there locking and mutability strategy. So they perform better if
requirements suits there nature. Similarly,
CopyOnWriteArraySet is a
concurrent replacement to Synchronized Set. See What
is CopyOnWriteArrayList in Java
for more details








3.
BlockingQueue


BlockingQueue is also one of better known collection class in Java 5. BlockingQueue makes it
easy to implement producer-consumer
design pattern
by providing inbuilt blocking support for
put() and take() method. put() method
will block if Queue is full while
take() method
will block if Queue is empty. Java 5 API provides two concrete implementation
of
BlockingQueue in form of ArrayBlockingQueue
and LinkedBlockingQueue
, both of them implement FIFO ordering of element.
ArrayBlockingQueue is backed
by Array and its bounded in nature while
LinkedBlockingQueue is
optionally bounded. Consider using
BlockingQueue to solve
producer Consumer problem in Java instead of writing your won wait-notify
code
. Java 5 also provides
PriorityBlockingQueue, another
implementation of
BlockingQueue which is ordered on priority and
useful if you want to process elements on order other than FIFO.








4.
Deque and BlockingDeque


Deque interface is added in Java 6 and it extends Queue interface
to support insertion and removal from both end of
Queue referred
as
head and tail. Java6 also provides concurrent
implementation of
Deque like ArrayDeque and LinkedBlockingDeque. Deque Can
be used efficiently to increase parallelism in program by allowing set of worker
thread
to help each other by taking some of work load from other thread by
utilizing
Deque double end consumption property. So if all Thread
has there own set of task
Queue and they are consuming from head; helper
thread can also share some work load via consumption from tail.








5.
ConcurrentSkipListMap and ConcurrentSkipListSet


Just like ConcurrentHashMap
provides a concurrent alternative of synchronized
HashMap
.
ConcurrentSkipListMap and ConcurrentSkipListSet provide concurrent
alternative for synchronized version of
SortedMap and SortedSet. For example
instead of using TreeMap or TreeSet wrapped inside synchronized Collection, You
can consider using ConcurrentSkipListMap or ConcurrentSkipListSet from java.util.concurrent
package. They also implement
NavigableMap and NavigableSet to add additional navigation method we have seen in our post How
to use NavigableMap in Java
.





That’s all on this list of concurrent Collection classes from Java 5 and
6. They are added on
java.util.concurrent package as concurrent alternative of there synchronized counterpart. It’s good idea to learn these
Collection classes along with other popular classes from Java Collection
Framework.





Related Java Collection Tutorials from Javarevisited Blog





























Source:http://javarevisited.blogspot.com/2013/02/concurrent-collections-from-jdk-56-java-example-tutorial.html

Tidak ada komentar:

Posting Komentar