在Hashtable中,所有涉及到更新其中存放的内容的方法都是同步的
如:
public synchronized Object put(Object key, Object value) {}
public synchronized Object get(Object key) {}
...以此来保证Hashtable不会被多个线程同时更改

解决方案 »

  1.   

    因为HashMap的公共方法上没加synchronized关键字. 呵呵
      

  2.   

    1.Hashtable基本上没用了,用HashMap代替.
    2.需要同步的话用Collections.synchronizedMap(new HashMap())。
    3.即使同步了,也不一定是安全的,并发修改时仍然会出错。
      

  3.   

    public synchronized Object get(Object key) {}请教一下zcjl(),
    get()也需要同步吗?呵呵,请教了
      

  4.   

    嗯,也要的,不然谁知道会不会在这边get的时候,其他的程序把想要取出的东西删掉了啊?
    极端一点的例子是:这个线程执行get,而另一个却执行clear
    这时候你认为能get出正确的东东么?
      

  5.   

    用synchronized和不用synchronized简单的说就是
    1个房子有2个门,用synchronized的是从有锁的门
    进入房子,并且进入后锁门,出来后门打开。
    而不用synchronized的是从没有锁的门进入。
    从有锁的门进入的人只管把这个门锁上,但没办法干预从无锁的门进入的人
    所以如果clear()方法是synchronized,他进门后取走所有鸡蛋
    这时如果一个非synchronized的get()方法想进门取得一个鸡蛋就出错了