• 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()+" "+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



  • 相关阅读:
    HCNP Routing&Switching之BGP路由过滤和ASPathFilter Linux
    HCNP Routing&Switching之组播技术组播基础 Linux
    HCNP Routing&Switching之组播技术组播地址 Linux
    HCNP Routing&Switching之组播技术组播协议IGMP Linux
    HCNP Routing&Switching之BGP团体属性和团体属性过滤器 Linux
    pcanet网络理解
    OpenAPITools 实践
    React MobX 开始
    PDFium 渲染
    PDF.js Electron Viewer
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/7301935.html
Copyright © 2020-2023  润新知