Java 同步容器

同步容器有两类:java

  • Vector、Stack、HashTable
  • Collections类中提供的静态工厂方法建立的类

Vector 实现了List接口,和ArrayList相似,但方法都是synchronized方法,即进行了同步措施。数组

Stack 相似Vector使用synchronized方法同步,是继承Vector的。多线程

HashTable实现了Map接口,相似HashMap,可是HashTable进行了同步处理,而HashMap没有。异步

Collections类是一个工具提供类,提供了大量的方法,如对集合或者容器进行排序查找等操做,还提供了静态工厂方法来建立同步容器类。函数


HashMap和HashTable区别?Hashmap key能够是任何类型吗?工具

  • 1.HashTable的方法是同步的,方法前面都有synchronized,HashMap未同步,在多线程场景要手动同步。能够经过Map m = Collections.synchronizedMap(new HashMap())对HashMap进行同步操做。
  • 2.HashTable不容许有null值,key和value都不行,HashMap均可以有null。
  • 3.HashTable使用Enumeration遍历,HashMap使用iteration遍历。
  • 4.HashTable中hash数组大小默认是11,增长方式是old*2+1。HashMap中hash数组大小默认是16,必定是2的倍数。
  • 5.hash值使用不一样,HashTable直接使用对象的hashCode,HashMap从新计算hash值。

LinkedList ArrayList区别线程

ArrayList基于数组,LinkedList基于链表Arraylist,查找快;LinkedList插入删除快;随机查找频繁用ArrayList,插入删除频繁用LinkedList。对象


ArrayList,Vector,HashMap,HashTable扩容机制排序

数组 初始容量 扩容
ArrayList 10 old*3/2+1
Vector 10 old*2
HashMap 16 达到阈值扩容,为原来两倍
HashTable 11 达到阈值扩容,old*2+1

Concurrent包继承

  • semaphore信号量用来表示可用资源的数目,若是请求资源超过这个数,就阻塞这一线程。
  • callable接口,实现call函数,有返回值能够获得call函数的返回值判断call函数是否执行完毕。
  • Callable接口使用泛型去定义它的返回类型。Executors类提供了一些有用的方法去线程池中执行Callable内的任务。因为Callable任务是并行的,咱们必须等待它返回的结果。java.util.concurrent.Future对象为咱们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象,使用它咱们能够知道Callble任务的状态和获得Callblede的返回结果。Future提供了get()方法让咱们能够等待Callable结束并获取他的执行结果。
  • Future Task是Future的一个基础实现,咱们能够将他同Exexcutors使用处理异步任务。

Java Concurrency API中的Lock接口

  • Lock接口比同步方法和同步块提供了更具扩展性的锁操做。他们容许更灵活的结构,能够具备彻底不一样的性质,而且能够支持多个相关类的条件对象。
  • 可使锁更公平。
  • 可使线程在等待锁的时候响应中断,可让线程尝试获取锁,并在没法获取锁的时候当即返回或者等待一段时间。
  • 能够在不一样的范围,以不一样的顺序获取和释放锁。
相关文章
相关标签/搜索