382 ;;Quote: the concurrency model of Java makes it difficult to allow unsynchronized access to shared objects
|
382 ;;Quote: Guava disallows unsynchronized shared access by classifying every object as a shared monitor, an unshared value, or a shareable object within a single thread
|
383 ;;Quote: Java non-references are values of primitive types without aliasing or sharing
|
383+;;Quote: Guava allows user-defined classes to be mutable values and it identifies unshared objects
|
383 ;;Quote: an unshared Guava object is permanently owned by a shared monitor or unshared value; no other references
|
383 ;;Quote: Guava monitors are always synchronized; other instances are uniquely owned by a single monitor and never need synchronizing
|
383 ;;Quote: while Thread is a monitor, allow access to stop, interrupt, etc by other threads; no concurrent, shared data access
|
383 ;;Quote: use Guava values to pass complex data structures between monitors
|
383 ;;Quote: Guava values are stored in variables; no references, value equality, method export, null value, deep copying
|
383+;;Quote: Guava uses deep-copying for values and objects within values; does not copy references to monitors
|
383 ;;Quote: Guava has a 'move' operator that sets the source to null
|
383 ;;Quote: pass values by reference when source is dead or when neither copy will be updated; e.g., if value has no update methods
|
385 ;;Quote: Guava methods are read or update; by default, read methods and update constructors
|
385 ;;Quote: avoid deep copies by moving mutable values
|
385 ;;Quote: Guava has non-exclusive read locks and exclusive update locks; better than Java's synchronized methods
|
385 ;;Quote: Guava variables assigned to regions with the same owner, i.e., a monitor, value, or no owner for new objects
|
385 ;;Quote: Guava parameters may be kept or lent; a lent parameter is not retained; a kept parameter has the same owner as 'this
|
285 ;;Quote: Guava methods should return newly allocated objects since they may be linked into any region
|
390 ;;Quote: use Flanagan and Abadi's race-free type system to prove that Guava objects are never concurrently accessed
|
390+;;Quote: in Guava every variable has a region type and every method has a region type signature
|
390+;;Quote: read methods of Guava monitors can execute concurrently
|
392 ;;Quote: global methods in Guava might acquire a lock; maybe not idempotent; if also update, can not use from read methods
|
392+;;Quote: local read methods in Guava are idempotent unless they return a new value; can replace multiple calls with a single call
|
396 ;;Quote: Guava avoids lock fields in object headers; only monitors require locks
|
396 ;;Quote: implementations of monitors typically do not guarantee mutual exclusion; too restrictive
|
396 ;;Quote: message-passing is the major alternative to monitors
|
396+;;Quote: message-passing usually restricts the allowable data types; e.g., occam only transmits scalars and array of scalars
|
397 ;;Quote: Guava implements monitors with concurrent readers and exchange of richer data types; guarantees no data races
|