java api之实现(下)

2016-02-19 15:58 0 1 收藏

今天图老师小编给大家介绍下java api之实现(下),平时喜欢java api之实现(下)的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

包装器实现
  

     包装器实现是一种将它们的实际工作委托给一个特定 对象集 的实现,它在该 对象集 所提供的功能之上又增加了额外的功能。 对design patterns(设计样式) 爱好者来说,这是一个 decorator(油漆工) 样式。虽然有点异国情调,但确实简单明了。 !-- frame contents -- !-- /frame contents --
  
  
     这些实现是匿名的:不是提供一个公共类,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)。在一个包装器同步的 对象集 上的迭代惯用程序如下所示:
  
   Collection c = Collections.synchronizedCollection(myCollection);
  
   synchronized(c) {
  
   Iterator i = c.iterator(); // Must be in the synchronized block!
  
   while (i.hasNext())
  
   foo(i.next());
  
   }
     在一个同步 Map 的 Collection视图上的迭代惯用程序与上述程序相似,但有一个诀窍,那就是,当在同步 Map 的Collection视图上迭代时, 用户必须对同步 Map 做手工同步,而不是对 Collection视图本身做同步:
  
   !-- frame contents -- !-- /frame contents -- Map m = Collections.synchronizedMap(new HashMap());
   ...
  
   Set s = m.keySet(); // Needn"t be in synchronized block
   ...
  
   synchronized(m) { // Synchronizing on m, not s!
  
   Iterator i = s.iterator(); // Must be in synchronized block
  
   while (i.hasNext())
  
   foo(i.next());
   }
  
     包装器实现的一个小的缺陷是你不能执行一个包装器实现的非接口操作。因此,比如在上面的 List 的例子中,你就不能调用包装的ArrayList上的ensureCapacity

来源:https://www.tulaoshi.com/n/20160219/1610814.html

延伸阅读
除了基于屏幕的组件外,你还应该掌握使用表单把多个组件组织到一个屏幕上去。这一部分将讨论Form类和可以放置到表单上去的组件。 1. Form 一个表单对象是一个screen,它可以包含任意的项,包括只读的和可编辑的文本框,图像,日期域,gauge以及选项组组件。前面已提到,任何Item类的子类都可以放置到表单对象上去。Form类的构造器如下: ...
     在Servlet之前Java服务器端编程使用C或Perl编写复杂的CGI来实现来完成,Java Servlet API的出现极大地简化了Java在服务器端编程的复杂性同时能最大限度地发挥Java的的整体优势。 在这个专题中我们由浅入深地向大家介绍Java Servlet的基本特征、开发环境的配置以及Servlet的一些主要API类。 Servlet慨述 Ser...
Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。事实上,java1.0不支持任何打印功能。Java1.1在java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。当java1.2问世,它围绕PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了...
以往的DOS系统是通过DOS中断和BIOS中断向用户提供串行接口的通讯能力。在Windows环境下,C++的开发工具既没有提供象DOS和BIOS中那样专门的串行通讯控制方法,也不答应用户直接控制串口的中断。 为了保证资源共享,Windows系统完全接管了各种硬件资源,使用中断来控制端口将破坏系统的多任务性,使系统的稳定性受到影响。但Windows...
  看过一个关于screen的例子后,你应该会问起:你是如何来组织这些screen的?在它们之间是如何导航的?你是如何管理显示及输入设备的?回答是,所有的功能皆由Display类来实现,它提供了相应的方法用于把对象显示在设备的屏幕上以及用于检索设备的属性等。 1. Display 一个指向设备的display的引用可以通过提供一个MIDlet引用给静态方...

经验教程

414

收藏

5
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部