同步容器的作用
Java中的容器主要为List、set、Map、Queue,这些容器都有不同的实现类,比如ArrayLIst、HashSet、HashMap、PriorityQueue等等,但是大部分都是非线程安全的,意味着在多线程访问的时候,必须通过程序做同步访问操作。
于是,Java提供了这些容器的线程安全版本,也就是同步容器,使用同步容器的时候就不用再去做同步的控制。
Java中的同步容器
Java中的同步容器主要有以下几类:
- Vector: Vector实现了List接口,内部就是一个动态的数组,和ArrayList类似,不同是的,Vector类中的方法都是被synchronized标识的,所以这个类是一个同步容器。
- Stack:Stack继承了Vector,是一个动态的栈,同样的,Stack的所有方法都被synchronized标识,也是一个同步容器。
- Hashtable:Hashtable实现了Map接口,其作用和HashMap类似,不同的是Hashtable中的所有方法都是被synchronized标识的,所以也是一个同步容器。
- Collections:Collections是一个集合的工具类,里面提供了各种静态的方法来创建同步容器,静态方法都以synchronizedXXX()开头,创建各种容器的同步版本。
同步容器的缺陷
在上面介绍各种同步容器的时候,看到所有的同步容器的实现都是采用synchronized的方式实现方法的同步,而通过synchronized的方式同步,在同一时刻,只能有一个线程可以访问该方法,性能比较差。所以,这些同步容器都有一个缺陷,那就是性能会较低。