在Hashtable中,所有涉及到更新其中存放的内容的方法都是同步的
如:
public synchronized Object put(Object key, Object value) {}
public synchronized Object get(Object key) {}
...以此来保证Hashtable不会被多个线程同时更改
如:
public synchronized Object put(Object key, Object value) {}
public synchronized Object get(Object key) {}
...以此来保证Hashtable不会被多个线程同时更改
2.需要同步的话用Collections.synchronizedMap(new HashMap())。
3.即使同步了,也不一定是安全的,并发修改时仍然会出错。
get()也需要同步吗?呵呵,请教了
极端一点的例子是:这个线程执行get,而另一个却执行clear
这时候你认为能get出正确的东东么?
1个房子有2个门,用synchronized的是从有锁的门
进入房子,并且进入后锁门,出来后门打开。
而不用synchronized的是从没有锁的门进入。
从有锁的门进入的人只管把这个门锁上,但没办法干预从无锁的门进入的人
所以如果clear()方法是synchronized,他进门后取走所有鸡蛋
这时如果一个非synchronized的get()方法想进门取得一个鸡蛋就出错了