|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.
包装器完成
包装器完成是一种将它们的实践事情托付给一个特定对象集的完成,它在该对象集所供应的功效之上又增添了分外的功效。对designpatterns(计划款式)喜好者来讲,这是一个decorator(油漆工)款式。固然有点异国情调,但的确复杂了然。
这些完成是匿名的:不是供应一个大众类,JDK供应一个staticfactorymethod(静态办法)。一切这些都能够在仅包括静态办法的CollectionsAPI中找到。
同步包装器(SynchronizationWrappers)
同步包装器将主动同步(线程平安的)增加到一个恣意的对象集。6个中心对象集接口中的每个都对应一个静态办法:
publicstaticCollectionsynchronizedCollection(Collectionc);
publicstaticSetsynchronizedSet(Sets);
publicstaticListsynchronizedList(Listlist);
publicstaticMapsynchronizedMap(Mapm);
publicstaticSortedSetsynchronizedSortedSet(SortedSets);
publicstaticSortedMapsynchronizedSortedMap(SortedMapm);
每个如许的办法都前往一个由特定对象集作为后备的同步(线程平安的)Collection。为包管串行存取,一切对后备对象集的存取都必需经由过程前往的对象集来完成,这一点是相当主要的。包管这一点的一个烦琐举措是不要坚持对后备对象集的援用,创立如许的同步对象集是一个小技能:
Listlist=Collections.synchronizedList(newArrayList());
一个用这类体例创立的对象集,每比特都是线程平安的,就象VectorM那样的"一般"同步对象集一样。在必要并发存取情形下,在前往的对象集上迭代时,用户对前往的对象集做手工同步是非常需要的。这是由于迭代是经由过程对对象集的多重挪用完成的,它必需被编写为一个独自的最小单位操纵(atomicoperation)。在一个包装器同步的对象集上的迭代习用程序以下所示:
Collectionc=Collections.synchronizedCollection(myCollection);
synchronized(c){
Iteratori=c.iterator();//Mustbeinthesynchronizedblock!
while(i.hasNext())
foo(i.next());
}
在一个同步Map的Collection视图上的迭代习用程序与上述程序类似,但有一个窍门,那就是,当在同步Map的Collection视图上迭代时,用户必需对同步Map做手工同步,而不是对Collection视图自己做同步:
Mapm=Collections.synchronizedMap(newHashMap());
...
Sets=m.keySet();//Needn"tbeinsynchronizedblock
...
synchronized(m){//Synchronizingonm,nots!
Iteratori=s.iterator();//Mustbeinsynchronizedblock
while(i.hasNext())
foo(i.next());
}
包装器完成的一个小的缺点是你不克不及实行一个包装器完成的非接口操纵。因而,好比在下面的List的例子中,你就不克不及挪用包装的ArrayList上的ensureCapacity操纵。
<p>
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。 |
|