zoukankan      html  css  js  c++  java
  • 3.3.2线程安全的HashMap

    代码:public class SysHashMao {
    private static Map<String,String> map= Collections.synchronizedMap(new HashMap<String,String>());
    public static void main(String[] args) {
    map.put("11","11");
    map.get("11");
    }
    }

    源码解读:可以看到,SynchronizedMap的每一个方法 都加上了Synchronized关键字,通过锁定mutex,达到加锁的限制,从而保障了线程的安全性


    private static class SynchronizedMap<K,V>
    implements Map<K,V>, Serializable {
    private static final long serialVersionUID = 1978198479659022715L;

    private final Map<K,V> m; // Backing Map
    final Object mutex; // Object on which to synchronize

    SynchronizedMap(Map<K,V> m) {
    if (m==null)
    throw new NullPointerException();
    this.m = m;
    mutex = this;
    }

    SynchronizedMap(Map<K,V> m, Object mutex) {
    this.m = m;
    this.mutex = mutex;
    }

    public int size() {
    synchronized (mutex) {return m.size();}
    }
    public boolean isEmpty() {
    synchronized (mutex) {return m.isEmpty();}
    }
    public boolean containsKey(Object key) {
    synchronized (mutex) {return m.containsKey(key);}
    }
    public boolean containsValue(Object value) {
    synchronized (mutex) {return m.containsValue(value);}
    }
    public V get(Object key) {
    synchronized (mutex) {return m.get(key);}
    }

    public V put(K key, V value) {
    synchronized (mutex) {return m.put(key, value);}
    }
    public V remove(Object key) {
    synchronized (mutex) {return m.remove(key);}
    }
    public void putAll(Map<? extends K, ? extends V> map) {
    synchronized (mutex) {m.putAll(map);}
    }
    public void clear() {
    synchronized (mutex) {m.clear();}
    }


  • 相关阅读:
    IHttpHandler做文件防盗链接
    使用SQL的全文搜索功能构建 Web 搜索应用程序
    Google 二维条码 API
    Flash Media Server 入门教程
    Janus WinForms Controls Suite v2.0.1000
    如何将数据大容量加载到合并发布中的表(复制 TransactSQL 编程)
    转:CentOS 5.4下的Memcache安装
    转:用php读取xml数据
    HPUX启动和关闭
    目录,文件操作详谈—php
  • 原文地址:https://www.cnblogs.com/anxbb/p/8464774.html
Copyright © 2011-2022 走看看