Java Doc for SyncCollection.java in  » Ajax » Laszlo-4.0.10 » EDU » oswego » cs » dl » util » concurrent » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Ajax » Laszlo 4.0.10 » EDU.oswego.cs.dl.util.concurrent 
Source Cross Reference  Class Diagram Java Document (Java Doc) 


java.lang.Object
   EDU.oswego.cs.dl.util.concurrent.SyncCollection

All known Subclasses:   EDU.oswego.cs.dl.util.concurrent.SyncList,  EDU.oswego.cs.dl.util.concurrent.SyncSet,
SyncCollection
public class SyncCollection implements Collection(Code)
SyncCollections wrap Sync-based control around java.util.Collections. They are similar in operation to those provided by java.util.Collection.synchronizedCollection, but have several extended capabilities.

The Collection interface is conceptually broken into two parts for purposes of synchronization control. The purely inspective reader operations are:

  • size
  • isEmpty
  • toArray
  • contains
  • containsAll
  • iterator
The possibly mutative writer operations (which are also the set of operations that are allowed to throw UnsupportedOperationException) are:
  • add
  • addAll
  • remove
  • clear
  • removeAll
  • retainAll

SyncCollections can be used with either Syncs or ReadWriteLocks. When used with single Syncs, the same lock is used as both the reader and writer lock. The SyncCollection class cannot itself guarantee that using a pair of read/write locks will always correctly protect objects, since Collection implementations are not precluded from internally performing hidden unprotected state changes within conceptually read-only operations. However, they do work with current java.util implementations. (Hopefully, implementations that do not provide this natural guarantee will be clearly documentented as such.)

This class provides a straight implementation of Collections interface. In order to conform to this interface, sync failures due to interruption do NOT result in InterruptedExceptions. Instead, upon detection of interruption,

  • All mutative operations convert the interruption to an UnsupportedOperationException, while also propagating the interrupt status of the thread. Thus, unlike normal java.util.Collections, SyncCollections can transiently behave as if mutative operations are not supported.
  • All read-only operations attempt to return a result even upon interruption. In some contexts, such results will be meaningless due to interference, but provide best-effort status indications that can be useful during recovery. The cumulative number of synchronization failures encountered during such operations is accessible using method synchronizationFailures(). Non-zero values may indicate serious program errors.

The iterator() method returns a SyncCollectionIterator with properties and methods that are analogous to those of SyncCollection itself: hasNext and next are read-only, and remove is mutative. These methods allow fine-grained controlled access, but do NOT preclude concurrent modifications from being interleaved with traversals, which may lead to ConcurrentModificationExceptions. However, the class also supports method unprotectedIterator that can be used in conjunction with the readerSync or writerSync methods to perform locked traversals. For example, to protect a block of reads:

 Sync lock = coll.readerSync();
 try {
 lock.acquire();
 try {
 Iterator it = coll.unprotectedIterator();
 while (it.hasNext()) 
 System.out.println(it.next());
 }
 finally {
 lock.release();
 }
 }
 catch (InterruptedException ex) { ... }
 
If you need to protect blocks of writes, you must use some form of reentrant lock (for example ReentrantLock or ReentrantWriterPreferenceReadWriteLock) as the Sync for the collection in order to allow mutative methods to proceed while the current thread holds the lock. For example, you might need to hold a write lock during an initialization sequence:
 Collection c = new SyncCollection(new ArrayList(), 
 new ReentrantWriterPreferenceReadWriteLock());
 // ...
 c.writeLock().acquire();
 try {
 for (...) {
 Object x = someStream.readObject();
 c.add(x); // would block if writeLock not reentrant
 }
 }
 catch (IOException iox) {
 ...
 }
 finally {
 c.writeLock().release();
 }
 catch (InterruptedException ex) { ... }
 

(It would normally be better practice here to not make the collection accessible until initialization is complete.)

This class does not specifically support use of timed synchronization through the attempt method. However, you can obtain this effect via the TimeoutSync class. For example:

 Mutex lock = new Mutex();
 TimeoutSync timedLock = new TimeoutSync(lock, 1000); // 1 sec timeouts
 Collection c = new SyncCollection(new HashSet(), timedlock);
 

The same can be done with read-write locks:

 ReadWriteLock rwl = new WriterPreferenceReadWriteLock();
 Sync rlock = new TimeoutSync(rwl.readLock(), 100);
 Sync wlock = new TimeoutSync(rwl.writeLock(), 100);
 Collection c = new SyncCollection(new HashSet(), rlock, wlock);
 

In addition to synchronization control, SyncCollections may be useful in any context requiring before/after methods surrounding collections. For example, you can use ObservableSync to arrange notifications on method calls to collections, as in:

 class X {
 Collection c;
 static class CollectionObserver implements ObservableSync.SyncObserver {
 public void onAcquire(Object arg) {
 Collection coll = (Collection) arg;
 System.out.println("Starting operation on" + coll);
 // Other plausible responses include performing integrity
 //   checks on the collection, updating displays, etc
 }
 public void onRelease(Object arg) {
 Collection coll = (Collection) arg;
 System.out.println("Finished operation on" + coll);
 }
 }
 X() {
 ObservableSync s = new ObservableSync();
 c = new SyncCollection(new HashSet(), s);
 s.setNotificationArgument(c);
 CollectionObserver obs = new CollectionObserver();
 s.attach(obs);
 }
 ...
 }
 

[ Introduction to this package. ]
See Also:   LayeredSync
See Also:   TimeoutSync


Inner Class :public class SyncCollectionIterator implements Iterator

Field Summary
final protected  Collectionc_
    
final protected  Syncrd_
    
final protected  SynchronizedLongsyncFailures_
    
final protected  Syncwr_
    

Constructor Summary
public  SyncCollection(Collection collection, Sync sync)
     Create a new SyncCollection protecting the given collection, and using the given sync to control both reader and writer methods.
public  SyncCollection(Collection collection, ReadWriteLock rwl)
     Create a new SyncCollection protecting the given collection, and using the given ReadWriteLock to control reader and writer methods.
public  SyncCollection(Collection collection, Sync readLock, Sync writeLock)
     Create a new SyncCollection protecting the given collection, and using the given pair of locks to control reader and writer methods.

Method Summary
public  booleanadd(Object o)
    
public  booleanaddAll(Collection coll)
    
protected  voidafterRead(boolean wasInterrupted)
    
protected  booleanbeforeRead()
    
public  voidclear()
    
public  booleancontains(Object o)
    
public  booleancontainsAll(Collection coll)
    
public  booleanisEmpty()
    
public  Iteratoriterator()
    
public  SyncreaderSync()
    
public  booleanremove(Object o)
    
public  booleanremoveAll(Collection coll)
    
public  booleanretainAll(Collection coll)
    
public  intsize()
    
public  longsyncFailures()
    
public  Object[]toArray()
    
public  Object[]toArray(Object[] a)
    
public  IteratorunprotectedIterator()
    
public  SyncwriterSync()
    

Field Detail
c_
final protected Collection c_(Code)



rd_
final protected Sync rd_(Code)



syncFailures_
final protected SynchronizedLong syncFailures_(Code)



wr_
final protected Sync wr_(Code)




Constructor Detail
SyncCollection
public SyncCollection(Collection collection, Sync sync)(Code)
Create a new SyncCollection protecting the given collection, and using the given sync to control both reader and writer methods. Common, reasonable choices for the sync argument include Mutex, ReentrantLock, and Semaphores initialized to 1.

Sample Usage

 Collection c = new SyncCollection(new ArrayList(), new Mutex()); 
 



SyncCollection
public SyncCollection(Collection collection, ReadWriteLock rwl)(Code)
Create a new SyncCollection protecting the given collection, and using the given ReadWriteLock to control reader and writer methods.

Sample Usage

 Collection c = new SyncCollection(new HashSet(), 
 new WriterPreferenceReadWriteLock());
 



SyncCollection
public SyncCollection(Collection collection, Sync readLock, Sync writeLock)(Code)
Create a new SyncCollection protecting the given collection, and using the given pair of locks to control reader and writer methods.




Method Detail
add
public boolean add(Object o)(Code)



addAll
public boolean addAll(Collection coll)(Code)



afterRead
protected void afterRead(boolean wasInterrupted)(Code)
Clean up after a reader operation *



beforeRead
protected boolean beforeRead()(Code)
Try to acquire sync before a reader operation; record failure *



clear
public void clear()(Code)



contains
public boolean contains(Object o)(Code)



containsAll
public boolean containsAll(Collection coll)(Code)



isEmpty
public boolean isEmpty()(Code)



iterator
public Iterator iterator()(Code)



readerSync
public Sync readerSync()(Code)
Return the Sync object managing read-only operations



remove
public boolean remove(Object o)(Code)



removeAll
public boolean removeAll(Collection coll)(Code)



retainAll
public boolean retainAll(Collection coll)(Code)



size
public int size()(Code)



syncFailures
public long syncFailures()(Code)
Return the number of synchronization failures for read-only operations



toArray
public Object[] toArray()(Code)



toArray
public Object[] toArray(Object[] a)(Code)



unprotectedIterator
public Iterator unprotectedIterator()(Code)
Return the base iterator of the underlying collection *



writerSync
public Sync writerSync()(Code)
Return the Sync object managing mutative operations



Methods inherited from java.lang.Object
native protected Object clone() throws CloneNotSupportedException(Code)(Java Doc)
public boolean equals(Object obj)(Code)(Java Doc)
protected void finalize() throws Throwable(Code)(Java Doc)
final native public Class getClass()(Code)(Java Doc)
native public int hashCode()(Code)(Java Doc)
final native public void notify()(Code)(Java Doc)
final native public void notifyAll()(Code)(Java Doc)
public String toString()(Code)(Java Doc)
final native public void wait(long timeout) throws InterruptedException(Code)(Java Doc)
final public void wait(long timeout, int nanos) throws InterruptedException(Code)(Java Doc)
final public void wait() throws InterruptedException(Code)(Java Doc)

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.