当前位置:主页   - 电脑 - 程序设计 - JAVA
java api之实现(下)
来源:网络   作者:   更新时间:2012-06-08
收藏此页】    【字号    】    【打印】    【关闭

  包装器实现

  包装器实现是一种将它们的实际工作委托给一个特定 对象集 的实现,它在该 对象集 所提供的功能之上又增加了额外的功能。 对design patterns(设计样式) 爱好者来说,这是一个 decorator(油漆工) 样式。虽然有点异国情调,但确实简单明了。

  这些实现是匿名的:不是提供一个公共类,JDK 提供一个 static factory method(静态方法)。 所有这些都可以在仅包含静态方法的Collections API 中找到。

  同步包装器(Synchronization Wrappers)

  同步包装器将自动同步(线程安全的)添加到一个任意的 对象集。6个 核心 对象集 接口中的每一个都对应一个静态方法:

public static Collection synchronizedCollection(Collection c);
public static Set synchronizedSet(Set s);
public static List synchronizedList(List list);
public static Map synchronizedMap(Map m);
public static SortedSet synchronizedSortedSet(SortedSet s);
public static SortedMap synchronizedSortedMap(SortedMap m);

   每一个这样的方法都返回一个由特定 对象集 作为后备的同步(线程安全的)Collection。 为保证串行存取,所有对后备 对象集 的存取都必须通过返回的 对象集 来完成,这一点是至关重要的。 保证这一点的一个简便办法是不要保持对后备 对象集 的引用, 创建这样的同步 对象集 是一个小技巧:

  List list = Collections.synchronizedList(new ArrayList());

  一个用这种方式创建的对象集,每一比特都是线程安全的,就象VectorM那样的"正常"同步 对象集 一样。 在需要并发存取情况下,在返回的 对象集 上迭代时,用户对返回的 对象集 做手工同步是十分必要的。 这是因为迭代是通过对对象集 的多重调用完成的,它必须被编写为一个单独的最小单元操作(atomic operation)。在一个包装器同步的 对象集 上的迭代惯用程序如下所示:

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明