15.同步类容器Vector

同步类容器1

    1.线程都是安全的。

    2.在某些场景下需要加锁来保护“复合操作”

            a.迭代:反复去访问元素、遍历完容器所有的元素

            b.跳转:根据下标制定去访问查找元素

            c.条件运算

    3.复合操作在多线程并发修改内容时:可能会出现意外的行为、容器迭代的过程中被并发的修改了内容,这是早期的迭代器设计没有考虑的问题


同步类容器2

    1.古老的vector、HashTable,这些容器的同步功能其实只是都有 Collections.synchronizedList(new ArrayList<String>()); 等工厂方法去创建时间的。    

    2.底层  synchronizedList 对每个公用方法都进行了同步,使得每次只有一个线程去访问容器的姿态(必须保证安全同时,也必须要有足够好的性能)。


例1

  1. package demo5;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Vector;
  5. /**
  6. * Created by liudan on 2017/7/9.
  7. */
  8. public class MyThread1 extends Thread {
  9. /*同步类容器、动态数组*/
  10. public static void main(String[] args) {
  11. final Vector<String> ticksts = new Vector<>();
  12. List<Object> lsit = new ArrayList<>();
  13. for (int i=1;i<=10;i++){
  14. ticksts.add("G1001-火车票-G000X"+i);
  15. }
  16. for (int i=1;i<=10;i++){
  17. new Thread("线程00"+i){
  18. @Override
  19. public void run() {
  20. while (true){
  21. if (ticksts.isEmpty()) break;
  22. System.err.println(Thread.currentThread().getName()+"\t"+ticksts.remove(0));
  23. }
  24. }
  25. }.start();
  26. }
  27. }
  28. }

  29. 输出
  30. 线程001 G1001-火车票-G000X1 线程001 G1001-火车票-G000X2 线程001 G1001-火车票-G000X3 线程001 G1001-火车票-G000X4 线程002 G1001-火车票-G000X5 线程002 G1001-火车票-G000X7 线程001 G1001-火车票-G000X6 线程001 G1001-火车票-G000X9 线程001 G1001-火车票-G000X10 线程002 G1001-火车票-G000X8



posted @ 2017-08-07 22:41  逍遥叹!!  阅读(201)  评论(0编辑  收藏  举报