本帖最后由 张飞年 于 2012-9-29 00:22 编辑
ArrayList,HashSet,TreeSet都 是非同步 的,多个线程并发访问时有时会出现问题。我觉得对这个现象最有说服力就是迭代器的移除操作,这些集合只能是先成为一个序列固定之后再用迭代器的方法进行移除,,不然编译器不通过。
在单线程下是安全的,在多线程下得如编译器所说的那样来:如果多个线程同时访问一个 TreeSet,而其中至少一个线程修改了该 set,那么它必须 外部同步。这一般是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSortedSet 方法来“包装”该 set。此操作最好在创建时进行,以防止对 set 的意外非同步访问: SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
具休的代码我这会也举不出,呵。 |