Collection(接)
|-Set(接)
|-EnumSet
|-SortedSet(接)
|-TreeSet
|-HashSet
|-LinkedHashSet
|-Queue(接)
|-Deque(接)
|-LinkedList(实现List接口)
|-PriorityQueue
|-List(接)
|-ArrayList
|-Vector(历史集合,线程安全)
|-Stack (历史集合,线程安全)
Map(接)
|-EnumMap
|-IdentityHashMap
|-HashMap
|-LinkedHahsMap
|-Hashtable (历史集合)
|-Properties (历史集合)
|-SortedMap(接)
|-TreeMap
|-WeakHashMap
所有实例Collection接口的类都必须提供两个标准的构造函数:(1)无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection 有相同的元素。
Collection.unmodifiableCollection()得到镜像,防止数据修改。
HashSet和TreeSet
考虑到效率,使用HashSet。如果要从Set中以有序的方式抽取元素,使用TreeSet。
Vector
Vector是一种老的动态数组,是线程同步的,效率很低,不赞成使用。
HashMap和TreeMap
效率选HashMap,有序使用TreeMap.
Array与Arrays
Array是Java中最基本的一个存储结构,Arrays静态类专门用于操作Array。
BlockingQueue(接)
|-ArrayBlockingQueue
|-DelayQueue
|-LinkedBlockingQueue
|-PriorityBlockingQueue
|-SynchronousQueue
一个线程将会持续生产新对象并将插入到队列之中,直到队列达到它所能容纳的临界点。如果该阻塞队列达到了其临界点,负责生产的线程将会在往里边插入新对象时发生阻塞。负责消费的线程将会一直从该阻塞队列中拿出对象,如果消费线程尝试去从一个空的队列中提取对象的话,这个消费线程将会处于阻塞之中。
数组阻塞队列ArrayBlockingQueue
在其初始化的时候设定一个上限,之后就无法对这个上限进行修改。
延迟队列DelayQueue
对元素进行持有直到一个特定的延迟到期。注入其中的元素必须实现java.util.concurrent.Delayed接口。
具有优先级的阻塞队列PriorityBlockingQueue
一个无界的并发队列,你无法向这个队列中插入null值。
同步队列SynchronousQueue
它的内部同时只能够容纳单个元素,把这个类称作一个队列显然是夸大其词,它更多像是一个汇合点。
ConcurrentMap(接)
|-ConcurrentHahsMap
ConcurrentHahsMpa和java.util.HashTable类很相似,但ConcurrentHashMap能够提供比HahsTable更好的并发性能。
并发导航映射ConcurrentNavigableMap
heapMap(T toKey):返回一个包含小于给定toKey的key的子map。
tailMap(T fromKey):返回一个包含了不小于给定fromKey的key的子map。
subMap(T from,T to):返回一个键值介于from(包含)和to(不包含)之间的子map。
CountDownLatch
它允许一个或多个线程等待一系列指定操作的完成,它会以一个给定的数量初始化,countDown每被调用一次,这一数量就减一,通过调用await方法,线程可以阻塞等待这一数量到达零。
CyclicBarrier
这是一种同步机制,它就是一个所有线程必须等待的一个栅栏,直到所有的线程都到达这里,然后所有线程才可以继续做其他事情。
Semaphore
主要有两个用途:
(1)保护一个重要部分防止一次起过N个线程进入。
(2)在两个线程这间发送信号。
ExecutorService(接)
|-ThreadPoolExecutor
|-ScheduledThreadPoolExecutor
ThreadPoolExecutor
包含的线程池的数量由以下变量决定:
(1)corePoolSize
(2)maximumPoolSize
当一个任务委托给线程池时,如果线程数理低于corePoolSize,一个新的线程将被创建,即使池中可能尚有空闲线程。
如果内部 任务队列已满,而且有至少corePoolSize正在运行,但是运行线程的数量低于maximumPoolSize,一个新的线程将被创建。
定时执行者服务ScheduledExecutorService
它能够将任务延迟后执行,或者间隔固定时间多次执行。
ForkJoinPool
这是一个特殊的线程池,它让我们可以很方便地把任务分裂成几个更小的任务,任务可以继续分割成更小的子任务,只要它还能分割。
Lock(接)
|-ReetrantLock
Lock和synchronized的不同
(1)synchronzied代码块不能够保证访问等待的线程的先后顺序。
(2)你不能够传递任何参数给一个synchronzied代码块的入口。
(3)synchronized块必须被完整地包含在单个方法里。
ReadWriteLock
|-ReetrantReadWriteLock
读写锁能够允许多个线程在同一时间对某特定资源进行读取,但同一时间内只能有一个线程对其进行写入。
ConcurrentLinkedDeque
Java 7中引入的类,它实现了一个非阻塞并发列表,如果操作不能立即完成,会抛出异常或者返回一个null值。
(1)getFirst()和getLast()这些方法返回分别从列表中第一个和最后一个元素。他们不会从列表中删除返回的元素。如果列表是空的,这些方法抛出一个NoSuchElementException。
(2)peek(),peekFirst(),peekLast()这些方法返回列的第一个和最后一个元素。他们不会从列表中删除返回的元素。如果列表为空,这些方法返回一个null值。
(3)remove(), removeFirst(), removeLast():这此方法返回列表的第一个和最后一个元素。他们从列表中移除返回的元素。如果列表是空的,这些方法抛出一个NoSuchElementException。
(4)像大多数其他并发集合类实现,这个类不允许null元素的使用。
最后欢迎大家访问我的个人网站:1024s