• 同步容器类


    • Vetor、HashTable
    • 同步类容器都是安全的,但是在某些场景下可能需要加锁来保护复合操作
    • 这些容器的同步功能都是由JDK的Collections.synchronized***等工厂方法实现的
    • 其底层机制是用synchronized关键字对每个公用方法都进行同步,或者使用Objext mutex对象锁的机制使得每次只能由一个线程访问容器的状态。
    • 在同步容器中,并发的修改,删除会引起容器的异常
    • 不满足互联网对高并发的需求:在线程安全的同时,还能有很好的并发性能。
    同步类容器的问题
    • 复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、条件运算(若没有则添加 )。

    • 符合操作在多线程并发的修改容器时,可能会表现出意外的行为,最典型的便是CMD,原因是当容器迭代的过程中,被并发的修改了内容,这是由于早期迭代器的设计的时候没有考虑并发的问题。

    • Vetor、HashTable对每个公有方法都进行synchronized同步。而工具类是synchronized和Objext mutex实现的对象锁,每次都只有一个线程能访问容器的状态。

    同步容器类工厂方法

    同步容器类工厂方法

    将一个普通容器传递进去变为同步类容器

            List<String> list = new ArrayList<>();
            Collections.synchronizedCollection(list);
    
    使用对象锁

    同步容器类根据自身的锁来保护它的每个方法

    final Collection<E> c;  // Backing Collection
    final Object mutex;     // Object on which to synchronize  
    
    SynchronizedCollection(Collection<E> c) {
                this.c = Objects.requireNonNull(c);
                mutex = this;
            }
               public int size() {
                synchronized (mutex) {return c.size();}
            }
            public boolean isEmpty() {
                synchronized (mutex) {return c.isEmpty();}
            }
            //....
    
  • 相关阅读:
    怎么安装Python?
    Ramnit蠕虫病毒分析和查杀
    Exphub[漏洞利用脚本库]
    SMBv3远程代码执行漏洞复现(CVE-2020-0796)
    Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
    Fastjson远程代码执行漏洞复现
    信息收集之——旁站、C段
    Redis未授权访问漏洞复现与利用
    CSS
    MVC控制器路由
  • 原文地址:https://www.cnblogs.com/renqiqiang/p/9440552.html
Copyright © 2020-2023  润新知