对于第一种情况,我只是猜测,但是我不知道如何做测试,但是Hashtable不是线程安全的,我记得只有Vector是线程安全的。对于第一种情况,我只是在这种特殊的情况下,不需要同步,应为两个线程都不修改保存的数据,一个是使用,一个是删除,所以我觉得不会发生意外,不需要同步,但是我不知道这样行不行。对于第二种情况,肯定是要同步的,英文是这样描述的this would screw us up as we tried to walk through the list,其中this指的是删除Hashtable中的一个键值对操作。我不太明白screw us up是一种什么样的情况?
如果这样的话,对于第一种情况,也就是只取得一个对象,也就是取得了该对象的指针,即便另一个线程从Hashtable中删除了该对象的纪录,但该对象因为有变量仍然纪录了该对象的指针,我想该对象应该不会被删除,所以两个进程互不影响,所以不用考虑Hashtable的同步对于第二种情况,如果不用同步,请问如果一个线程正在历遍Hashtable时,这时候另一个线程调用Hashtable的remove函数,会对第一个线程造成什么样的影响?
但是这里一个线程是删除Hashtable中的纪录,而可能同时另一个线程还在使用这条记录,这样做也不会出危险?
不知道你说的“危险”是什么?我是理解成,一个线程删除对象后,对象不存在,另一个线程再访问就会访问错误。如果是这个,我认为不会有危险,除非是 C++. 在 JAVA 里,只要有线程在使用对象,或说引用着某个对象, 那个对象就不会被删除。