[LinkedIn] Implement a thread safe hashtable

来源:互联网 发布:淘宝直通车开车时间 编辑:程序博客网 时间:2024/06/05 04:50
/* * before entering into synchronized method or block thread needs to acquire the lock * Here different thread cannot access "put" / "get" from the same instance of hashmap at the same time * The lock is obtained at the object level, meaning if t1 is using put(), t2 cannot use get() simultaneously */public ThreadSafeHashMap() {   items = (LinkedList<Cell<K, V>>[]) new LinkedList[cap]; } public int hashCode(K key) {   return key.toString().length() % items.length; } public synchronized void put(K key, V value) {   int x = hashCode(key);   if (items[x] == null) {     items[x] = new LinkedList<Cell<K, V>>();   }   LinkedList<Cell<K, V>> list = items[x];   for (Cell<K, V> c : list) {     if (c.equals(key)) {       list.remove(c);       break;     }   }   Cell<K, V> cell = new Cell<K, V>(key, value);   list.add(cell); }public synchronized V get(K key) {   int x = hashCode(key);   if (items[x] == null) {     return null;   }   LinkedList<Cell<K, V>> list = items[x];   for (Cell<K, V> c : list) {     if (c.equals(key)) {       return c.getValue();     }   }   return null; }}
0 0
原创粉丝点击