你的位置:首页 > 软件开发 > Java > 转:java多线程

转:java多线程

发布时间:2016-02-28 16:00:05
java同步容器  在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了C ...
  • java同步容器

  在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。像ArrayList、LinkedList、HashMap这些容器都是非线程安全的。因此,在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处理,这样导致在使用这些容器的时候非常地不方便。

  • java中的同步容器

  1)Vector、Stack、HashTable  

  Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施。

  Stack也是一个同步容器,它的方法也用synchronized进行了同步,它实际上是继承于Vector类。

  HashTable实现了Map接口,它和HashMap很相似,但是HashTable进行了同步处理,而HashMap没有。

  2)Collections类中提供的静态工厂方法创建的类:

  Collections类是一个工具提供类,注意,它和Collection不同,Collection是一个顶层的接口。在Collections类中提供了大量的方法,比如对集合或者容器进行排序、查找等操作。最重要的是,在它里面提供了几个静态工厂方法来创建同步容器类。

  • 同步容器缺陷

  从同步容器的具体实现源码可知,同步容器中的方法采用了synchronized进行了同步,那么很显然,这必然会影响到执行性能,另外,同步容器不一定是真正地完全线程安全的,还需要添加额外的同步措施。

例如:

转:java多线程转:java多线程
 1 public class Test { 2   static Vector<Integer> vector = new Vector<Integer>(); 3   public static void main(String[] args) throws InterruptedException { 4     while(true) { 5       for(int i=0;i<10;i++) 6         vector.add(i); 7       Thread thread1 = new Thread(){ 8         public void run() { 9           for(int i=0;i<vector.size();i++)10             vector.remove(i);11         };12       };13       Thread thread2 = new Thread(){14         public void run() {15           for(int i=0;i<vector.size();i++)16             vector.get(i);17         };18       };19       thread1.start();20       thread2.start();21       while(Thread.activeCount()>10)  {22         23       }24     }25   }26 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:转:java多线程

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。