logo资料库

Java Concurrency in Practice 无水印pdf.pdf

第1页 / 共234页
第2页 / 共234页
第3页 / 共234页
第4页 / 共234页
第5页 / 共234页
第6页 / 共234页
第7页 / 共234页
第8页 / 共234页
资料共234页,剩余部分请下载后查看
Cover
Index
Listing and Image Index
Preface
How to Use this Book
Code Examples
Listing 1. Bad Way to Sort a List. Don't Do this.
Listing 2. Less than Optimal Way to Sort a List.
Acknowledgments
1 - Introduction
1.1. A (Very) Brief History of Concurrency
1.2. Benefits of Threads
1.2.1. Exploiting Multiple Processors
1.2.2. Simplicity of Modeling
1.2.3. Simplified Handling of Asynchronous Events
1.2.4. More Responsive User Interfaces
1.3. Risks of Threads
1.3.1. Safety Hazards
Listing 1.1. Non-thread-safe Sequence Generator.
Figure 1.1. Unlucky Execution of UnsafeSequence.Nextvalue.
Listing 1.2. Thread-safe Sequence Generator.
1.3.2. Liveness Hazards
1.3.3. Performance Hazards
1.4. Threads are Everywhere
Part I: Fundamentals
2. Thread Safety
2.1. What is Thread Safety?
2.1.1. Example: A Stateless Servlet
Listing 2.1. A Stateless Servlet.
2.2. Atomicity
Listing 2.2. Servlet that Counts Requests without the Necessary Synchronization. Don't Do this.
2.2.1. Race Conditions
2.2.2. Example: Race Conditions in Lazy Initialization
Listing 2.3. Race Condition in Lazy Initialization. Don't Do this.
2.2.3. Compound Actions
Listing 2.4. Servlet that Counts Requests Using AtomicLong.
2.3. Locking
Listing 2.5. Servlet that Attempts to Cache its Last Result without Adequate Atomicity. Don't Do this.
2.3.1. Intrinsic Locks
Listing 2.6. Servlet that Caches Last Result, But with Unacceptably Poor Concurrency. Don't Do this.
2.3.2. Reentrancy
Listing 2.7. Code that would Deadlock if Intrinsic Locks were Not Reentrant.
2.4. Guarding State with Locks
2.5. Liveness and Performance
Figure 2.1. Poor Concurrency of SynchronizedFactorizer.
Listing 2.8. Servlet that Caches its Last Request and Result.
3. Sharing Objects
3.1. Visibility
Listing 3.1. Sharing Variables without Synchronization. Don't Do this.
3.1.1. Stale Data
Listing 3.2. Non-thread-safe Mutable Integer Holder.
Listing 3.3. Thread-safe Mutable Integer Holder.
3.1.2. Non-atomic 64-bit Operations
3.1.3. Locking and Visibility
Figure 3.1. Visibility Guarantees for Synchronization.
3.1.4. Volatile Variables
Listing 3.4. Counting Sheep.
3.2. Publication and Escape
Listing 3.5. Publishing an Object.
Listing 3.6. Allowing Internal Mutable State to Escape. Don't Do this.
Listing 3.7. Implicitly Allowing the this Reference to Escape. Don't Do this.
3.2.1. Safe Construction Practices
Listing 3.8. Using a Factory Method to Prevent the this Reference from Escaping During Construction.
3.3. Thread Confinement
3.3.1. Ad-hoc Thread Confinement
3.3.2. Stack Confinement
Listing 3.9. Thread Confinement of Local Primitive and Reference Variables.
3.3.3. ThreadLocal
Listing 3.10. Using ThreadLocal to Ensure thread Confinement.
3.4. Immutability
Listing 3.11. Immutable Class Built Out of Mutable Underlying Objects.
3.4.1. Final Fields
3.4.2. Example: Using Volatile to Publish Immutable Objects
Listing 3.12. Immutable Holder for Caching a Number and its Factors.
3.5. Safe Publication
Listing 3.13. Caching the Last Result Using a Volatile Reference to an Immutable Holder Object.
Listing 3.14. Publishing an Object without Adequate Synchronization. Don't Do this.
3.5.1. Improper Publication: When Good Objects Go Bad
Listing 3.15. Class at Risk of Failure if Not Properly Published.
3.5.2. Immutable Objects and Initialization Safety
3.5.3. Safe Publication Idioms
3.5.4. Effectively Immutable Objects
3.5.5. Mutable Objects
3.5.6. Sharing Objects Safely
4. Composing Objects
4.1. Designing a Thread-safe Class
Listing 4.1. Simple Thread-safe Counter Using the Java Monitor Pattern.
4.1.1. Gathering Synchronization Requirements
4.1.2. State-dependent Operations
4.1.3. State Ownership
4.2. Instance Confinement
Listing 4.2. Using Confinement to Ensure Thread Safety.
4.2.1. The Java Monitor Pattern
Listing 4.3. Guarding State with a Private Lock.
4.2.2. Example: Tracking Fleet Vehicles
4.3. Delegating Thread Safety
Listing 4.4. Monitor-based Vehicle Tracker Implementation.
Listing 4.5. Mutable Point Class Similar to Java.awt.Point.
4.3.1. Example: Vehicle Tracker Using Delegation
Listing 4.6. Immutable Point class used by DelegatingVehicleTracker.
Listing 4.7. Delegating Thread Safety to a ConcurrentHashMap.
Listing 4.8. Returning a Static Copy of the Location Set Instead of a "Live" One.
4.3.2. Independent State Variables
Listing 4.9. Delegating Thread Safety to Multiple Underlying State Variables.
4.3.3. When Delegation Fails
Listing 4.10. Number Range Class that does Not Sufficiently Protect Its Invariants. Don't Do this.
4.3.4. Publishing Underlying State Variables
4.3.5. Example: Vehicle Tracker that Publishes Its State
Listing 4.11. Thread-safe Mutable Point Class.
Listing 4.12. Vehicle Tracker that Safely Publishes Underlying State.
4.4. Adding Functionality to Existing Thread-safe Classes
Listing 4.13. Extending Vector to have a Put-if-absent Method.
4.4.1. Client-side Locking
Listing 4.14. Non-thread-safe Attempt to Implement Put-if-absent. Don't Do this.
Listing 4.15. Implementing Put-if-absent with Client-side Locking.
4.4.2. Composition
Listing 4.16. Implementing Put-if-absent Using Composition.
4.5. Documenting Synchronization Policies
4.5.1. Interpreting Vague Documentation
5. Building Blocks
5.1. Synchronized Collections
5.1.1. Problems with Synchronized Collections
Listing 5.1. Compound Actions on a Vector that may Produce Confusing Results.
Figure 5.1. Interleaving of Getlast and Deletelast that throws ArrayIndexOutOfBoundsException.
Listing 5.2. Compound Actions on Vector Using Client-side Locking.
Listing 5.3. Iteration that may Throw ArrayIndexOutOfBoundsException.
Listing 5.4. Iteration with Client-side Locking.
5.1.2. Iterators and Concurrentmodificationexception
Listing 5.5. Iterating a List with an Iterator.
5.1.3. Hidden Iterators
Listing 5.6. Iteration Hidden within String Concatenation. Don't Do this.
5.2. Concurrent Collections
5.2.1. ConcurrentHashMap
5.2.2. Additional Atomic Map Operations
5.2.3. CopyOnWriteArrayList
Listing 5.7. ConcurrentMap Interface.
5.3. Blocking Queues and the Producer-consumer Pattern
5.3.1. Example: Desktop Search
5.3.2. Serial Thread Confinement
Listing 5.8. Producer and Consumer Tasks in a Desktop Search Application.
Listing 5.9. Starting the Desktop Search.
5.3.3. Deques and Work Stealing
5.4. Blocking and Interruptible Methods
Listing 5.10. Restoring the Interrupted Status so as Not to Swallow the Interrupt.
5.5. Synchronizers
5.5.1. Latches
5.5.2. FutureTask
Listing 5.11. Using CountDownLatch for Starting and Stopping Threads in Timing Tests.
Listing 5.12. Using FutureTask to Preload Data that is Needed Later.
Listing 5.13. Coercing an Unchecked Throwable to a RuntimeException.
5.5.3. Semaphores
5.5.4. Barriers
Listing 5.14. Using Semaphore to Bound a Collection.
5.6. Building an Efficient, Scalable Result Cache
Listing 5.16. Initial Cache Attempt Using HashMap and Synchronization.
Listing 5.17. Replacing HashMap with ConcurrentHashMap.
Figure 5.4. Unlucky Timing that could Cause Memorizer3 to Calculate the Same Value Twice.
Listing 5.18. Memorizing Wrapper Using FutureTask.
Listing 5.19. Final Implementation of Memorizer.
Listing 5.20. Factorizing Servlet that Caches Results Using Memorizer.
Summary of Part I
Part II: Structuring Concurrent Applications
6. Task Execution
6.1. Executing Tasks in Threads
6.1.1. Executing Tasks Sequentially
Listing 6.1. Sequential Web Server.
6.1.2. Explicitly Creating Threads for Tasks
Listing 6.2. Web Server that Starts a New Thread for Each Request.
6.1.3. Disadvantages of Unbounded Thread Creation
6.2. The Executor Framework
Listing 6.3. Executor Interface.
6.2.1. Example: Web Server Using Executor
Listing 6.4. Web Server Using a Thread Pool.
Listing 6.5. Executor that Starts a New Thread for Each Task.
6.2.2. Execution Policies
Listing 6.6. Executor that Executes Tasks Synchronously in the Calling Thread.
6.2.3. Thread Pools
6.2.4. Executor Lifecycle
Listing 6.7. Lifecycle Methods in ExecutorService.
Listing 6.8. Web Server with Shutdown Support.
6.2.5. Delayed and Periodic Tasks
6.3. Finding Exploitable Parallelism
Listing 6.9. Class Illustrating Confusing Timer Behavior.
6.3.1. Example: Sequential Page Renderer
Listing 6.10. Rendering Page Elements Sequentially.
6.3.2. Result-bearing Tasks: Callable and Future
Listing 6.11. Callable and Future Interfaces.
Listing 6.12. Default Implementation of newTaskFor in ThreadPoolExecutor.
6.3.3. Example: Page Renderer with Future
6.3.4. Limitations of Parallelizing Heterogeneous Tasks
Listing 6.13. Waiting for Image Download with Future.
6.3.5. CompletionService: Executor Meets BlockingQueue
Listing 6.14. QueueingFuture Class Used By ExecutorCompletionService.
6.3.6. Example: Page Renderer with CompletionService
Listing 6.15. Using CompletionService to Render Page Elements as they Become Available.
6.3.7. Placing Time Limits on Tasks
6.3.8. Example: A Travel Reservations Portal
Listing 6.16. Fetching an Advertisement with a Time Budget.
Summary
Listing 6.17. Requesting Travel Quotes Under a Time Budget.
7. Cancellation and Shutdown
7.1. Task Cancellation
Listing 7.1. Using a Volatile Field to Hold Cancellation State.
Listing 7.2. Generating a Second's Worth of Prime Numbers.
7.1.1. Interruption
Listing 7.3. Unreliable Cancellation that can Leave Producers Stuck in a Blocking Operation. Don't Do this.
Listing 7.4. Interruption Methods in Thread.
Listing 7.5. Using Interruption for Cancellation.
7.1.2. Interruption Policies
7.1.3. Responding to Interruption
Listing 7.6. Propagating InterruptedException to Callers.
Listing 7.7. Non-cancelable Task that Restores Interruption Before Exit.
7.1.4. Example: Timed Run
Listing 7.8. Scheduling an Interrupt on a Borrowed Thread. Don't Do this.
7.1.5. Cancellation Via Future
Listing 7.9. Interrupting a Task in a Dedicated Thread.
Listing 7.10. Cancelling a Task Using Future.
7.1.7. Encapsulating Nonstandard Cancellation with Newtaskfor
Listing 7.11. Encapsulating Nonstandard Cancellation in a Thread by Overriding Interrupt.
7.2. Stopping a Thread-based Service
7.2.1. Example: A Logging Service
Listing 7.12. Encapsulating Nonstandard Cancellation in a Task with Newtaskfor.
Listing 7.13. Producer-Consumer Logging Service with No Shutdown Support.
Listing 7.14. Unreliable Way to Add Shutdown Support to the Logging Service.
7.2.2. ExecutorService Shutdown
Listing 7.15. Adding Reliable Cancellation to LogWriter.
Listing 7.16. Logging Service that Uses an ExecutorService.
7.2.3. Poison Pills
Listing 7.17. Shutdown with Poison Pill.
7.2.4. Example: A One-shot Execution Service
Listing 7.18. Producer Thread for IndexingService.
Listing 7.19. Consumer Thread for IndexingService.
Listing 7.20. Using a Private Executor Whose Lifetime is Bounded by a Method Call.
7.2.5. Limitations of Shutdownnow
Listing 7.21. ExecutorService that Keeps Track of Cancelled Tasks After Shutdown.
Listing 7.22. Using TRackingExecutorService to Save Unfinished Tasks for Later Execution.
7.3. Handling Abnormal Thread Termination
Listing 7.23. Typical Thread-pool Worker Thread Structure.
7.3.1. Uncaught Exception Handlers
Listing 7.24. UncaughtExceptionHandler Interface.
Listing 7.25. UncaughtExceptionHandler that Logs the Exception.
7.4. JVM Shutdown
7.4.1. Shutdown Hooks
Listing 7.26. Registering a Shutdown Hook to Stop the Logging Service.
7.4.2. Daemon Threads
7.4.3. Finalizers
Summary
8. Applying Thread Pools
8.1. Implicit Couplings Between Tasks and Execution Policies
8.1.1. Thread Starvation Deadlock
Listing 8.1. Task that Deadlocks in a Single-threaded Executor. Don't Do this.
8.1.2. Long-running Tasks
8.2. Sizing Thread Pools
8.3. Configuring ThreadPoolExecutor
8.3.1. Thread Creation and Teardown
Listing 8.2. General Constructor for ThreadPoolExecutor.
8.3.2. Managing Queued Tasks
8.3.3. Saturation Policies
Listing 8.3. Creating a Fixed-sized Thread Pool with a Bounded Queue and the Caller-runs Saturation Policy.
8.3.4. Thread Factories
Listing 8.4. Using a Semaphore to Throttle Task Submission.
Listing 8.5. ThreadFactory Interface.
Listing 8.6. Custom Thread Factory.
8.3.5. Customizing ThreadPoolExecutor After Construction
Listing 8.7. Custom Thread Base Class.
Listing 8.8. Modifying an Executor Created with the Standard Factories.
8.4. Extending ThreadPoolExecutor
8.4.1. Example: Adding Statistics to a Thread Pool
Listing 8.9. Thread Pool Extended with Logging and Timing.
8.5. Parallelizing Recursive Algorithms
Listing 8.10. Transforming Sequential Execution into Parallel Execution.
Listing 8.11. Transforming Sequential Tail-recursion into Parallelized Recursion.
Listing 8.12. Waiting for Results to be Calculated in Parallel.
8.5.1. Example: A Puzzle Framework
Listing 8.13. Abstraction for Puzzles Like the "Sliding Blocks Puzzle".
Listing 8.14. Link Node for the Puzzle Solver Framework.
Listing 8.15. Sequential Puzzle Solver.
Listing 8.16. Concurrent Version of Puzzle Solver.
Listing 8.17. Result-bearing Latch Used by ConcurrentPuzzleSolver.
Listing 8.18. Solver that Recognizes when No Solution Exists.
Summary
9. GUI Applications
9.1. Why are GUIs Single-threaded?
9.1.1. Sequential Event Processing
9.1.2. Thread Confinement in Swing
9.2. Short-running GUI Tasks
Figure 9.1. Control Flow of a Simple Button Click.
Listing 9.1. Implementing SwingUtilities Using an Executor.
Listing 9.2. Executor Built Atop SwingUtilities.
Listing 9.3. Simple Event Listener.
Figure 9.2. Control Flow with Separate Model and View Objects.
9.3. Long-running GUI Tasks
Listing 9.4. Binding a Long-running Task to a Visual Component.
Listing 9.5. Long-running Task with User Feedback.
9.3.1. Cancellation
Listing 9.6. Cancelling a Long-running Task.
9.3.2. Progress and Completion Indication
9.3.3. SwingWorker
9.4. Shared Data Models
Listing 9.7. Background Task Class Supporting Cancellation, Completion Notification, and Progress Notification.
Listing 9.8. Initiating a Long-running, Cancellable Task with BackgroundTask.
9.4.1. Thread-safe Data Models
9.4.2. Split Data Models
9.5. Other Forms of Single-threaded Subsystems
Summary
Part III: Liveness, Performance, and Testing
10. Avoiding Liveness Hazards
10.1. Deadlock
10.1.1. Lock-ordering Deadlocks
Figure 10.1. Unlucky Timing in LeftRightDeadlock.
Listing 10.1. Simple Lock-ordering Deadlock. Don't Do this.
10.1.2. Dynamic Lock Order Deadlocks
Listing 10.2. Dynamic Lock-ordering Deadlock. Don't Do this.
Listing 10.3. Inducing a Lock Ordering to Avoid Deadlock.
Listing 10.4. Driver Loop that Induces Deadlock Under Typical Conditions.
10.1.3. Deadlocks Between Cooperating Objects
10.1.4. Open Calls
Listing 10.5. Lock-ordering Deadlock Between Cooperating Objects. Don't Do this.
10.1.5. Resource Deadlocks
Listing 10.6. Using Open Calls to Avoiding Deadlock Between Cooperating Objects.
10.2. Avoiding and Diagnosing Deadlocks
10.2.1. Timed Lock Attempts
10.2.2. Deadlock Analysis with Thread Dumps
Listing 10.7. Portion of Thread Dump After Deadlock.
10.3. Other Liveness Hazards
10.3.1. Starvation
10.3.2. Poor Responsiveness
10.3.3. Livelock
Summary
11. Performance and Scalability
11.1. Thinking about Performance
11.1.1. Performance Versus Scalability
11.1.2. Evaluating Performance Tradeoffs
11.2. Amdahl's Law
Figure 11.1. Maximum Utilization Under Amdahl's Law for Various Serialization Percentages.
Listing 11.1. Serialized Access to a Task Queue.
11.2.1. Example: Serialization Hidden in Frameworks
Figure 11.2. Comparing Queue Implementations.
11.2.2. Applying Amdahl's Law Qualitatively
11.3. Costs Introduced by Threads
11.3.1. Context Switching
Listing 11.2. Synchronization that has No Effect. Don't Do this.
11.3.2. Memory Synchronization
Listing 11.3. Candidate for Lock Elision.
11.3.3. Blocking
11.4. Reducing Lock Contention
11.4.1. Narrowing Lock Scope ("Get in, Get Out")
Listing 11.4. Holding a Lock Longer than Necessary.
Listing 11.5. Reducing Lock Duration.
11.4.2. Reducing Lock Granularity
Listing 11.6. Candidate for Lock Splitting.
Listing 11.7. ServerStatus Refactored to Use Split Locks.
11.4.3. Lock Striping
11.4.4. Avoiding Hot Fields
Listing 11.8. Hash-based Map Using Lock Striping.
11.4.5. Alternatives to Exclusive Locks
11.4.6. Monitoring CPU Utilization
11.4.7. Just Say No to Object Pooling
11.5. Example: Comparing Map Performance
Figure 11.3. Comparing Scalability of Map Implementations.
11.6. Reducing Context Switch Overhead
Summary
12. Testing Concurrent Programs
12.1. Testing for Correctness
Listing 12.1. Bounded Buffer Using Semaphore.
12.1.1. Basic Unit Tests
Listing 12.2. Basic Unit Tests for BoundedBuffer.
12.1.2. Testing Blocking Operations
Listing 12.3. Testing Blocking and Responsiveness to Interruption.
12.1.3. Testing Safety
Listing 12.4. Medium-quality Random Number Generator Suitable for Testing.
Listing 12.5. Producer-consumer Test Program for BoundedBuffer.
Listing 12.6. Producer and Consumer Classes Used in PutTakeTest.
12.1.4. Testing Resource Management
12.1.5. Using Callbacks
Listing 12.7. Testing for Resource Leaks.
Listing 12.8. Thread Factory for Testing ThreadPoolExecutor.
Listing 12.9. Test Method to Verify Thread Pool Expansion.
12.1.6. Generating More Interleavings
Listing 12.10. Using Thread.yield to Generate More Interleavings.
12.2. Testing for Performance
12.2.1. Extending PutTakeTest to Add Timing
Listing 12.11. Barrier-based Timer.
Figure 12.1. TimedPutTakeTest with Various Buffer Capacities.
Listing 12.12. Testing with a Barrier-based Timer.
Listing 12.13. Driver Program - for TimedPutTakeTest.
12.2.2. Comparing Multiple Algorithms
Figure 12.2. Comparing Blocking Queue Implementations.
12.2.3. Measuring Responsiveness
Figure 12.3. Completion Time Histogram for TimedPutTakeTest with Default (Non-fair) and Fair Semaphores.
Figure 12.4. Completion Time Histogram for TimedPutTakeTest with Single-item Buffers.
12.3. Avoiding Performance Testing Pitfalls
12.3.1. Garbage Collection
12.3.2. Dynamic Compilation
Figure 12.5. Results Biased by Dynamic Compilation.
12.3.3. Unrealistic Sampling of Code Paths
12.3.4. Unrealistic Degrees of Contention
12.3.5. Dead Code Elimination
12.4. Complementary Testing Approaches
12.4.1. Code Review
12.4.2. Static Analysis Tools
12.4.3. Aspect-oriented Testing Techniques
12.4.4. Profilers and Monitoring Tools
Summary
Part IV: Advanced Topics
13 - Explicit Locks
13.1. Lock and ReentrantLock
Listing 13.1. Lock Interface.
Listing 13.2. Guarding Object State Using ReentrantLock.
13.1.1. Polled and Timed Lock Acquisition
13.1.2. Interruptible Lock Acquisition
Listing 13.3. Avoiding Lock-ordering Deadlock Using trylock.
Listing 13.4. Locking with a Time Budget.
Listing 13.5. Interruptible Lock Acquisition.
13.1.3. Non-block-structured Locking
13.2. Performance Considerations
Figure 13.1. Intrinsic Locking Versus ReentrantLock Performance on Java 5.0 and Java 6.
13.3. Fairness
Figure 13.2. Fair Versus Non-fair Lock Performance.
13.4. Choosing Between Synchronized and ReentrantLock
13.5. Read-write Locks
Listing 13.6. ReadWriteLock Interface.
Listing 13.7. Wrapping a Map with a Read-write Lock.
Figure 13.3. Read-write Lock Performance.
Summary
14 - Building Custom Synchronizers
14.1. Managing State Dependence
Listing 14.1. Structure of Blocking State-dependent Actions.
14.1.1. Example: Propagating Precondition Failure to Callers
Listing 14.2. Base Class for Bounded Buffer Implementations.
Listing 14.3. Bounded Buffer that Balks When Preconditions are Not Met.
Listing 14.4. Client Logic for Calling GrumpyBoundedBuffer.
14.1.2. Example: Crude Blocking by Polling and Sleeping
Figure 14.1. Thread Oversleeping Because the Condition Became True Just After It Went to Sleep.
Listing 14.5. Bounded Buffer Using Crude Blocking.
14.1.3. Condition Queues to the Rescue
Listing 14.6. Bounded Buffer Using Condition Queues.
14.2. Using Condition Queues
14.2.1. The Condition Predicate
14.2.2. Waking Up Too Soon
Listing 14.7. Canonical Form for State-dependent Methods.
14.2.3. Missed Signals
14.2.4. Notification
Listing 14.8. Using Conditional Notification in BoundedBuffer.put.
14.2.5. Example: A Gate Class
14.2.6. Subclass Safety Issues
Listing 14.9. Recloseable Gate Using Wait and Notifyall.
14.2.7. Encapsulating Condition Queues
14.2.8. Entry and Exit Protocols
14.3. Explicit Condition Objects
Listing 14.10. Condition Interface.
14.4. Anatomy of a Synchronizer
Listing 14.11. Bounded Buffer Using Explicit Condition Variables.
Listing 14.12. Counting Semaphore Implemented Using Lock.
14.5. AbstractQueuedSynchronizer
Listing 14.13. Canonical Forms for Acquisition and Release in AQS.
14.5.1. A Simple Latch
Listing 14.14. Binary Latch Using AbstractQueuedSynchronizer.
14.6. AQS in Java.util.concurrent Synchronizer Classes
14.6.1. ReentrantLock
Listing 14.15. tryAcquire Implementation From Non-fair ReentrantLock.
14.6.2. Semaphore and CountDownLatch
Listing 14.16. tryacquireshared and tryreleaseshared from Semaphore.
14.6.3. FutureTask
14.6.4. ReentrantReadWriteLock
Summary
15. Atomic Variables and Non-blocking Synchronization
15.1. Disadvantages of Locking
15.2. Hardware Support for Concurrency
15.2.1. Compare and Swap
Listing 15.1. Simulated CAS Operation.
15.2.2. A Non-blocking Counter
Listing 15.2. Non-blocking Counter Using CAS.
15.2.3. CAS Support in the JVM
15.3. Atomic Variable Classes
15.3.1. Atomics as "Better Volatiles"
Listing 15.3. Preserving Multivariable Invariants Using CAS.
15.3.2. Performance Comparison: Locks Versus Atomic Variables
Figure 15.1. Lock and AtomicInteger Performance Under High Contention.
Figure 15.2. Lock and AtomicInteger Performance Under Moderate Contention.
Listing 15.4. Random Number Generator Using ReentrantLock.
Listing 15.5. Random Number Generator Using AtomicInteger.
15.4. Non-blocking Algorithms
15.4.1. A Non-blocking Stack
15.4.2. A Non-blocking Linked List
Listing 15.6. Non-blocking Stack Using Treiber's Algorithm (Treiber, 1986).
Figure 15.3. Queue with Two Elements in Quiescent State.
Figure 15.4. Queue in Intermediate State During Insertion.
Figure 15.5. Queue Again in Quiescent State After Insertion is Complete.
Listing 15.7. Insertion in the Michael-Scott Non-blocking Queue Algorithm (Michael and Scott, 1996).
15.4.3. Atomic Field Updaters
Listing 15.8. Using Atomic Field Updaters in ConcurrentLinkedQueue.
15.4.4. The ABA Problem
Summary
16. The Java Memory Model
/16.1. What is a Memory Model, and Why would I Want One?
16.1.1. Platform Memory Models
16.1.2. Reordering
Figure 16.1. Interleaving Showing Reordering in PossibleReordering.
16.1.3. The Java Memory Model in 500 Words or Less
Listing 16.1. Insufficiently Synchronized Program that can have Surprising Results. Don't Do this.
Figure 16.2. Illustration of Happens-before in the Java Memory Model.
16.1.4. Piggybacking on Synchronization
Listing 16.2. Inner Class of FutureTask Illustrating Synchronization Piggybacking.
16.2. Publication
16.2.1. Unsafe Publication
Listing 16.3. Unsafe Lazy Initialization. Don't Do this.
16.2.2. Safe Publication
16.2.3. Safe Initialization Idioms
Listing 16.4. Thread-safe Lazy Initialization.
Listing 16.5. Eager Initialization.
Listing 16.6. Lazy Initialization Holder Class Idiom.
16.2.4. Double-checked Locking
Listing 16.7. Double-checked-locking Anti-pattern. Don't Do this.
Listing 16.8. Initialization Safety for Immutable Objects.
Summary
Appendix A. Annotations for Concurrency
A.1. Class Annotations
A.2. Field and Method Annotations
Bibliography
Word Bookmarks
pref03lev1sec1
pref03lev1sec2
pref03fn01
pref03list01
pref03list02
pref03lev1sec3
iddle1387
iddle1388
iddle1457
iddle2321
iddle2349
iddle3371
iddle3372
iddle3373
iddle3674
iddle3675
iddle3941
iddle4147
iddle4231
iddle4232
iddle4280
iddle4281
iddle4323
iddle4324
iddle1133
iddle1634
iddle1756
iddle2033
iddle2984
iddle3228
iddle3229
iddle3676
iddle3677
iddle3696
iddle3697
iddle3698
iddle4159
iddle4168
iddle4228
iddle4294
iddle4295
iddle4741
iddle4742
iddle4743
iddle4810
iddle4935
iddle4936
iddle3232
iddle3233
iddle3265
iddle4099
iddle4284
iddle4285
iddle4746
iddle4879
ch01lev2sec1
ch01lev2sec2
iddle1130
iddle1131
iddle2066
iddle2413
iddle2683
iddle3340
iddle3341
iddle4004
iddle4171
iddle4203
ch01lev2sec3
ch01fn01
ch01lev2sec4
iddle1979
iddle1980
iddle2061
iddle2062
iddle2068
iddle2069
iddle2497
iddle2765
iddle2766
iddle2767
iddle2776
iddle2777
iddle3176
iddle3177
iddle4573
iddle4740
iddle4777
iddle4778
iddle4813
iddle5028
iddle5029
ch01lev2sec5
ch01list01
iddle1094
iddle1635
iddle1636
iddle1637
iddle1959
iddle2537
iddle2768
iddle2769
iddle3338
iddle4465
iddle4466
ch01fig01
ch01sb01
ch01fn02
iddle1395
iddle1396
iddle2175
iddle2481
iddle2621
iddle2622
iddle2703
iddle3415
iddle3416
iddle3544
iddle3545
iddle3776
iddle3777
iddle3778
iddle4020
iddle4021
iddle4022
iddle4566
iddle4860
iddle48911
iddle4915
ch01fn03
ch01list02
iddle1261
iddle1279
iddle1614
iddle1693
iddle1694
iddle1709
iddle1758
iddle1797
iddle1991
ch01lev2sec6
iddle2074
iddle2075
iddle2616
iddle2950
iddle3014
iddle3015
iddle3016
iddle3028
iddle3031
iddle3037
iddle3038
iddle3422
iddle3423
iddle3424
iddle3425
iddle3426
iddle3477
iddle3478
iddle3479
iddle3480
iddle3481
iddle3494
iddle3495
iddle3511
iddle3512
iddle3543
iddle3907
iddle3908
iddle3974
iddle4087
iddle4227
iddle4372
iddle4759
iddle4760
iddle4761
iddle4867
iddle4878
ch01lev2sec7
iddle1180
iddle2411
iddle2412
iddle2928
iddle4000
iddle4001
iddle4383
iddle4384
iddle4527
iddle4822
iddle4934
ch01sb02
iddle1107
iddle1108
iddle1111
iddle1181
iddle1583
iddle1584
iddle2487
iddle2912
iddle2913
iddle3843
iddle3844
iddle4002
iddle4003
iddle4103
iddle4104
iddle4200
iddle4201
iddle4202
iddle4210
iddle4211
iddle4414
iddle4528
ch01fn04
iddle1017
iddle1018
iddle1019
iddle1254
iddle1451
iddle1452
iddle1453
iddle1531
iddle1532
iddle1639
iddle1640
iddle1652
iddle1746
iddle1998
iddle1999
iddle2000
iddle2001
iddle2002
iddle2003
iddle2347
iddle2348
iddle2870
iddle2871
iddle2872
iddle3027
iddle3032
iddle3033
iddle3034
iddle3262
iddle3266
iddle3267
iddle3268
iddle3278
iddle3281
iddle3282
iddle3448
iddle3449
iddle4028
iddle4029
iddle4030
iddle4031
iddle4158
iddle4222
iddle4223
iddle4239
iddle4240
iddle4377
iddle4378
iddle4379
iddle4380
iddle4381
iddle4382
iddle4406
iddle4407
iddle4532
iddle4533
iddle4534
iddle4535
iddle4729
iddle4959
iddle5011
iddle5040
iddle5041
iddle5060
iddle5097
iddle5098
iddle5099
ch02sb01
ch02sb02
ch02fn01
iddle1257
iddle1258
iddle1676
iddle1679
iddle1749
iddle1750
iddle1909
iddle1910
iddle2004
iddle2005
iddle2022
iddle2023
iddle2032
iddle2401
iddle2518
iddle2519
iddle2522
iddle2534
iddle2547
iddle2580
iddle2581
iddle2715
iddle2864
iddle2865
iddle2866
iddle3522
iddle3523
iddle3638
iddle3889
iddle4338
iddle4385
iddle4386
iddle4395
iddle4396
iddle4481
iddle4482
iddle4732
ch02sb03
ch02fn02
ch02sb04
ch02lev2sec1
ch02list01
iddle1166
iddle1167
iddle2185
iddle2210
iddle2556
iddle2557
iddle2571
iddle2572
iddle2591
iddle2592
iddle2608
iddle2719
iddle2720
iddle2779
iddle2780
ch02sb05
iddle4204
iddle4205
iddle4208
iddle4209
iddle4417
iddle4418
iddle4422
iddle4423
iddle4551
iddle4728
iddle4737
iddle1764
iddle17641
ch02list02
iddle2778
iddle3779
iddle3794
iddle4366
ch02fn03
ch02lev2sec2
ch02fn04
iddle1331
iddle2126
iddle2736
iddle2737
iddle2946
iddle2947
iddle3712
ch02lev2sec3
ch02list03
iddle1035
iddle1036
iddle1037
iddle1038
iddle1144
iddle1145
iddle1146
iddle1149
iddle1240
iddle1241
iddle1330
iddle1411
iddle1412
iddle1413
iddle1414
iddle1417
iddle1418
iddle1419
iddle1420
iddle1421
iddle1422
iddle1423
iddle1559
iddle1560
iddle1561
iddle1680
iddle1681
iddle1682
iddle1683
iddle1704
iddle1770
iddle1771
iddle1772
iddle1773
iddle1774
iddle1864
iddle1865
iddle1866
iddle1867
iddle1868
iddle2464
iddle2465
iddle2503
iddle2504
iddle2716
iddle2840
iddle2841
iddle2842
iddle2843
iddle3635
iddle3639
iddle3640
iddle3736
iddle3793
iddle3876
iddle3877
iddle3878
iddle3879
iddle4102
ch02lev2sec4
iddle4988
iddle4989
iddle4990
ch02sb06
ch02list04
iddle2027
iddle2105
iddle2589
ch02fn05
iddle3156
iddle3157
iddle4207
ch02sb07
iddle4399
iddle4420
iddle4739
iddle1155
iddle1280
iddle1871
iddle1872
iddle2209
ch02fn06
iddle2725
iddle2726
ch02list05
iddle2858
iddle2859
iddle3275
iddle3277
iddle1160
iddle2368
ch02sb08
iddle2587
iddle2588
ch02lev2sec5
iddle2721
iddle2722
iddle2723
iddle2724
iddle2826
iddle2827
iddle2828
iddle2829
iddle2830
iddle2831
iddle3106
iddle3107
iddle3119
iddle3245
iddle3283
iddle3285
iddle4539
iddle4540
iddle4955
ch02list06
iddle2191
iddle3057
iddle3134
iddle3135
ch02lev2sec6
iddle3715
iddle3716
iddle3805
iddle3807
iddle3809
iddle4128
iddle1030
ch02fn07
iddle1815
iddle2014
iddle2015
iddle2218
iddle2478
iddle2479
ch02list07
iddle3092
iddle3093
iddle3150
ch02fn08
iddle4172
iddle4173
iddle4174
iddle4402
iddle1095
iddle1178
iddle1326
iddle1327
ch02sb09
iddle2035
iddle2036
iddle2364
iddle2475
iddle2476
iddle2595
iddle2836
iddle3112
iddle3130
iddle3131
ch02fn09
iddle3367
iddle3368
iddle3595
ch02sb10
iddle3710
iddle3711
iddle4569
ch02fn10
iddle4940
iddle4941
iddle1427
iddle2544
iddle2545
iddle2857
iddle3025
iddle3026
ch02sb11
iddle3276
iddle3497
iddle3498
iddle4206
iddle4419
iddle4738
iddle1474
iddle3531
ch02fig01
iddle4111
iddle4480
ch02list08
iddle2093
iddle2551
iddle2566
iddle2583
iddle2584
ch02sb12
ch02sb13
iddle1031
iddle1753
iddle3209
iddle3211
iddle3362
iddle4237
iddle4408
iddle4409
iddle4548
iddle4560
iddle1141
iddle1428
iddle1429
iddle1430
iddle5105
iddle5107
ch03list01
iddle1939
iddle2146
iddle2618
iddle2619
iddle3398
iddle3399
ch03fn01
iddle3496
iddle3529
iddle3530
iddle3847
iddle3848
iddle3849
iddle3850
iddle3851
iddle3852
ch03sb01
iddle4286
iddle4287
iddle4456
iddle1686
iddle1761
iddle2227
iddle2228
iddle2305
iddle2306
ch03lev2sec1
iddle2558
iddle2559
iddle3409
iddle3410
ch03fn02
iddle4364
iddle4561
iddle4730
ch03list02
ch03list03
ch03lev2sec2
iddle1001
iddle1002
iddle1147
iddle1148
iddle1751
iddle1752
iddle2140
iddle2192
ch03fn03
ch03lev2sec3
iddle2839
iddle3161
iddle3300
iddle3374
iddle3375
ch03fig01
ch03sb02
ch03lev2sec4
iddle5104
iddle1832
ch03fn04
iddle2398
ch03fn05
iddle2610
iddle2640
iddle2641
iddle2642
iddle2919
iddle3383
iddle3384
iddle5064
iddle5122
ch03sb03
iddle3857
iddle4245
iddle4445
iddle4446
iddle4447
iddle4580
ch03fn06
iddle1142
iddle5050
iddle5051
iddle5063
iddle5121
iddle1404
iddle2021
iddle2046
iddle2050
ch03list04
iddle2821
iddle2863
iddle3162
ch03sb04
iddle3717
iddle3718
iddle3719
iddle3720
iddle3721
iddle4107
iddle4108
iddle4133
iddle5046
iddle5066
iddle5124
iddle1068
iddle1070
ch03list05
ch03list07
ch03list06
iddle2212
iddle3791
iddle3792
ch03fn07
iddle1566
iddle1567
iddle1568
iddle2199
iddle2601
iddle2602
ch03lev2sec5
iddle2745
iddle2746
ch03fn08
ch03sb05
iddle4718
iddle4719
iddle1436
iddle1537
iddle1538
iddle1982
ch03list08
iddle2170
iddle2292
iddle2293
iddle1046
iddle1539
iddle1547
iddle1548
iddle4297
iddle4524
iddle4525
iddle1782
iddle1783
iddle1798
iddle1799
iddle1931
iddle4748
iddle4749
iddle4750
ch03fn09
iddle2395
iddle2905
iddle2906
iddle2907
ch03lev2sec6
iddle3035
iddle3601
ch03fn10
iddle4298
iddle4751
iddle4851
ch03lev2sec7
iddle5128
iddle1535
iddle1536
iddle2013
ch03list09
iddle2402
iddle2850
iddle3036
iddle3360
iddle3361
iddle3653
iddle3654
iddle3821
iddle3822
ch03lev2sec8
iddle4356
iddle4357
iddle4358
iddle1546
iddle1549
iddle4756
iddle4757
iddle1965
iddle5052
iddle5053
iddle2448
iddle2449
ch03list10
ch03fn11
iddle1109
iddle4305
iddle4306
iddle4670
iddle4671
iddle4758
iddle4849
iddle5062
iddle1983
iddle2408
iddle2409
iddle2532
iddle2705
iddle2706
iddle2711
iddle2860
iddle2861
iddle3350
ch03sb06
iddle4126
iddle4127
iddle4852
ch03sb07
ch03fn12
iddle2204
iddle2353
iddle2376
iddle2533
iddle2713
ch03list11
iddle1073
iddle1158
ch03fn13
ch03lev2sec9
iddle1726
iddle1920
iddle1921
iddle4496
iddle4497
iddle2343
iddle2344
iddle2350
iddle2351
iddle5016
iddle2527
iddle2568
iddle2712
iddle2742
ch03sb08
ch03lev2sec10
iddle3352
iddle3485
iddle3725
iddle3726
iddle3780
iddle3781
ch03fn14
iddle4124
ch03list12
iddle5119
iddle2149
iddle2851
iddle3061
iddle3062
ch03list13
iddle3732
ch03list14
ch03lev2sec11
iddle1569
iddle1570
ch03fn15
iddle5108
iddle2216
ch03list15
ch03fn16
iddle2150
iddle3723
ch03lev2sec12
iddle2709
iddle2718
iddle2740
iddle2741
iddle2896
ch03sb09
iddle3351
ch03lev2sec13
iddle3722
iddle4033
iddle4034
ch03sb10
iddle4365
ch03lev2sec14
iddle1785
iddle1786
iddle2240
iddle2426
iddle2530
iddle2531
iddle2708
ch03sb11
ch03fn17
iddle2888
iddle3348
ch03lev2sec15
iddle1175
iddle1238
iddle1383
iddle1384
iddle1486
iddle1489
ch03sb12
ch03lev2sec16
iddle1666
iddle1669
iddle1670
iddle1967
iddle4437
iddle4438
iddle4439
ch03sb13
iddle2354
iddle2477
iddle2569
iddle2570
iddle2582
iddle2593
iddle2594
iddle2627
iddle2700
iddle2958
iddle2959
iddle2960
iddle3002
iddle3003
iddle3279
iddle3280
iddle3349
iddle3353
iddle3354
iddle1349
iddle1350
iddle1410
iddle3591
iddle3728
iddle3730
iddle4038
iddle4039
iddle4041
iddle1911
iddle1912
ch04sb01
iddle2031
iddle4216
iddle4235
iddle4236
iddle4555
iddle4583
iddle4584
iddle2609
iddle5071
iddle5072
iddle5120
iddle2862
iddle1154
ch04list01
iddle3345
iddle3363
iddle3364
iddle1542
iddle1562
ch04lev2sec1
iddle3592
iddle3636
iddle3637
iddle2104
iddle4412
iddle4413
iddle4503
iddle4504
iddle4505
iddle2714
iddle4563
iddle3142
iddle3143
iddle1150
iddle1237
iddle1437
iddle3890
iddle3891
iddle1727
ch04sb02
iddle1878
iddle1896
iddle1897
iddle4335
iddle4336
ch04lev2sec2
iddle4421
iddle4429
iddle4571
iddle4572
iddle4755
iddle2546
iddle2567
iddle4960
iddle2855
iddle3273
ch04lev2sec3
iddle3376
iddle3441
iddle3442
iddle3647
iddle4144
iddle1534
iddle4390
iddle4415
iddle4416
iddle2012
iddle2025
iddle5054
iddle2669
iddle2670
iddle2749
iddle3173
ch04fn1
iddle3438
iddle3439
iddle3440
iddle3467
iddle3468
iddle4044
iddle4179
iddle4352
iddle4403
iddle1342
iddle1343
iddle4490
iddle1438
iddle1533
ch04sb03
iddle2048
iddle2049
iddle2153
iddle2520
ch04list02
iddle2747
iddle2748
iddle2956
iddle2957
iddle3059
iddle1842
iddle1843
iddle1946
iddle1947
iddle1948
iddle1949
iddle2051
iddle2052
iddle4217
iddle2374
iddle2512
iddle2638
iddle2639
iddle4745
ch04sb04
iddle2897
iddle2898
ch04lev2sec4
iddle3056
iddle3244
ch04fn02
iddle3708
iddle3709
ch04list03
iddle1632
iddle1638
iddle2159
ch04lev2sec5
iddle5166
iddle5167
iddle5168
iddle2491
iddle2492
iddle2900
iddle3023
iddle3051
iddle3113
iddle3128
iddle3129
iddle3227
iddle3289
iddle1550
iddle1551
iddle1552
iddle3668
iddle3669
iddle1662
iddle1663
iddle1863
ch04fn03
iddle1940
iddle4283
iddle4476
iddle4477
ch04fn04
iddle5080
iddle5082
iddle5089
ch04fn05
ch04list04
iddle4734
iddle2139
iddle2141
iddle2154
ch04list05
ch04lev2sec6
ch04list06
ch04list07
iddle4461
iddle4462
iddle2107
iddle5078
iddle5079
ch04list08
ch04lev2sec7
iddle1553
iddle1554
ch04list09
iddle1941
iddle1151
iddle1335
iddle2215
iddle1862
ch04lev2sec8
iddle2728
iddle2729
iddle2147
iddle2852
ch04list10
iddle2856
iddle3886
iddle3274
ch04sb05
iddle4432
iddle4433
iddle2590
iddle5057
iddle5058
iddle5092
iddle2844
ch04lev2sec9
iddle3733
iddle3734
ch04sb06
ch04lev2sec10
iddle4435
ch04list11
iddle5061
iddle5068
iddle5127
iddle1206
iddle1207
ch04fn06
iddle1555
ch04list12
iddle1571
iddle1942
iddle2171
iddle1164
iddle1344
iddle1345
iddle2698
iddle1722
iddle1723
iddle2010
iddle2011
iddle2028
iddle2029
iddle2288
iddle2391
iddle2392
iddle2414
iddle2415
iddle2416
iddle3666
iddle3667
iddle3593
iddle3594
iddle4961
iddle3737
iddle3738
iddle5081
iddle5093
iddle3997
iddle3998
iddle3999
ch04list13
iddle4492
ch04lev2sec11
iddle4565
iddle4567
iddle4568
iddle1346
iddle1356
iddle1359
ch04list14
iddle2083
iddle1347
iddle1348
iddle1360
iddle1363
iddle1407
iddle1408
iddle1409
iddle2633
iddle2634
ch04list15
iddle1837
iddle1838
iddle1839
iddle1855
iddle1856
iddle1857
iddle1984
iddle3065
iddle2130
iddle2285
iddle2286
iddle2287
iddle2290
iddle2393
iddle2399
iddle2400
ch04lev2sec12
iddle2645
ch04list16
iddle4187
iddle3066
iddle3070
ch04fn07
iddle4292
ch04sb07
iddle1097
iddle4581
iddle4582
iddle1966
iddle2008
iddle2122
iddle2131
iddle5171
iddle2899
iddle2482
ch04fn08
iddle3490
iddle3892
ch04lev2sec13
iddle4564
ch04fn09
iddle1333
iddle1334
iddle1361
iddle1377
iddle1381
iddle1385
iddle1386
iddle1425
iddle1426
iddle1458
iddle1650
iddle1651
ch05lev2sec1
iddle2295
ch05list01
iddle2626
iddle1156
iddle2873
iddle2874
iddle3067
iddle1721
iddle3295
iddle3296
iddle3297
ch05fig01
ch05fn01
iddle2875
iddle4542
iddle4544
iddle4545
ch05list02
ch05list03
iddle5073
iddle5075
iddle5169
iddle5170
ch05list04
ch05lev2sec2
iddle1471
iddle1472
iddle1492
iddle5074
iddle5076
ch05fn02
iddle2774
iddle2233
iddle2300
iddle2885
iddle2886
ch05list05
iddle1378
iddle1379
iddle2876
iddle2877
iddle3076
iddle3239
iddle3240
iddle3241
iddle1659
iddle1660
iddle1661
iddle4060
iddle1717
iddle1718
iddle1719
iddle1720
iddle1809
iddle1935
iddle1936
iddle2019
iddle2020
iddle2024
ch05lev2sec3
iddle2291
iddle2521
iddle5077
iddle2848
iddle2849
iddle2878
iddle2881
ch05sb01
iddle3118
ch05list06
iddle3499
iddle3500
iddle1236
iddle1376
iddle1382
iddle1416
iddle4072
iddle1454
iddle1460
iddle1480
iddle1483
iddle1487
iddle1664
iddle4373
iddle4397
ch05sb02
iddle4549
iddle4550
iddle2121
iddle2574
iddle1461
iddle1490
iddle1491
iddle1493
iddle1494
iddle2624
iddle1558
ch05lev2sec4
iddle1937
iddle2993
iddle2994
iddle3006
iddle3007
iddle3178
iddle3179
iddle3739
iddle3748
iddle4061
iddle2879
iddle2880
iddle2887
iddle2990
iddle3005
iddle3044
iddle3045
iddle3046
iddle3047
iddle3048
iddle3075
iddle3116
iddle3117
iddle3144
iddle3153
iddle1020
iddle1021
iddle4543
iddle1163
iddle3552
iddle3665
iddle1665
iddle1671
iddle1724
iddle1725
iddle4062
iddle4134
iddle4218
iddle4219
iddle4220
iddle4221
iddle4331
iddle4332
iddle4333
iddle4334
ch05fn03
ch05lev2sec5
iddle4474
iddle4475
iddle4502
iddle4969
iddle4970
iddle4971
iddle4972
ch05lev2sec6
iddle5152
iddle2995
iddle3008
iddle3097
iddle1221
iddle1226
iddle3181
ch05list07
iddle1439
iddle1488
iddle1579
iddle1580
iddle3845
iddle3846
iddle1844
iddle1845
iddle1846
iddle3858
iddle3859
iddle1869
iddle1870
iddle1938
iddle2006
iddle2007
iddle4214
iddle4215
iddle2070
iddle2071
iddle4276
iddle4277
iddle4928
iddle1248
iddle1249
iddle1578
iddle3242
iddle3243
iddle3326
iddle3327
iddle3681
iddle3750
iddle3754
iddle2259
iddle2379
iddle2380
ch05sb03
iddle4993
iddle4994
iddle3622
iddle3773
iddle3774
iddle3919
iddle4007
iddle4796
iddle4862
iddle4863
ch05lev2sec7
iddle5156
iddle5157
iddle5158
iddle1121
iddle1390
iddle1391
iddle1543
iddle1544
iddle1705
iddle1706
iddle1840
ch05lev2sec8
iddle2115
iddle2123
iddle2345
iddle2346
ch05list08
iddle2987
ch05list09
iddle3359
iddle3519
iddle3611
iddle3663
ch05lev2sec9
iddle3731
iddle3761
iddle3764
iddle3765
iddle3766
iddle4183
iddle4184
iddle1066
iddle1067
iddle1124
iddle1208
iddle1213
iddle1482
iddle1518
iddle4597
iddle1576
iddle1577
iddle1599
iddle4811
iddle4812
iddle4814
iddle4815
iddle1886
iddle1890
iddle2799
iddle1641
iddle1642
iddle2985
iddle2986
iddle1929
iddle1930
iddle3430
iddle3431
iddle3432
iddle3433
iddle3434
iddle3435
iddle3436
iddle3437
iddle3689
iddle4100
iddle4101
iddle2787
iddle2790
iddle2791
iddle2792
iddle2793
iddle2794
iddle2795
iddle2816
iddle2817
ch05list10
iddle4747
iddle1440
iddle5146
iddle5147
iddle5148
iddle5149
iddle5150
iddle5161
iddle5162
iddle5163
iddle5164
ch05lev2sec10
iddle1582
iddle1624
iddle1625
iddle1629
iddle1653
iddle1654
iddle1728
iddle4125
iddle1903
iddle1904
iddle2026
iddle4327
iddle4328
iddle4329
iddle4330
iddle1136
iddle2194
iddle1291
iddle1300
iddle4463
iddle4464
iddle4469
iddle4515
iddle4516
iddle1397
iddle2446
iddle1441
iddle4974
iddle1607
iddle1697
iddle1700
iddle2932
iddle2933
iddle2934
iddle2935
iddle2936
iddle2197
iddle2225
iddle2423
iddle2430
iddle2432
ch05lev2sec11
iddle3683
iddle3684
iddle2940
ch05list11
iddle4398
iddle4585
iddle4586
iddle4587
iddle4588
iddle4589
iddle4590
ch05list12
iddle3982
iddle4019
iddle2039
iddle2040
iddle2156
iddle2226
iddle2261
iddle2436
iddle4424
iddle4425
iddle4604
iddle4605
iddle4654
iddle4655
iddle5144
iddle5145
iddle1319
iddle1320
iddle1442
ch05list13
iddle1701
ch05lev2sec12
iddle2252
iddle2253
iddle1039
iddle1060
iddle1061
ch05fn04
iddle1189
iddle1190
iddle1191
iddle1192
iddle1194
iddle1197
iddle1204
iddle1205
iddle1209
iddle1210
iddle1242
iddle1243
iddle1259
iddle1260
iddle1374
iddle1375
iddle2701
iddle2702
iddle1443
iddle1741
ch05lev2sec13
iddle2067
iddle3551
iddle3612
iddle3613
iddle2443
iddle2444
iddle2445
iddle3841
iddle3842
iddle3936
iddle3937
iddle4025
iddle4136
iddle4145
iddle4146
iddle4150
iddle2882
iddle2883
iddle2937
iddle1128
iddle1129
ch05list14
iddle1288
iddle1289
iddle1328
iddle1329
iddle3284
iddle4880
iddle4881
iddle3357
iddle1444
iddle3452
iddle3453
iddle3555
iddle3556
iddle3609
iddle4123
iddle4148
iddle4149
iddle1994
iddle2091
iddle2239
ch05fn05
iddle4574
iddle4575
iddle4576
iddle4577
iddle4578
iddle4890
iddle2961
iddle2962
ch05list15
iddle3465
iddle3466
iddle1459
iddle3979
iddle3980
iddle4080
iddle4081
iddle1734
iddle1735
iddle1742
iddle4138
iddle4213
iddle4288
iddle4289
iddle2097
iddle2098
iddle2113
iddle2135
iddle4478
iddle4479
ch05list16
iddle4661
iddle4662
iddle1051
iddle1285
iddle3192
ch05fig02
iddle3489
iddle2137
ch05fig03
ch05list17
iddle4541
ch05fig04
iddle1159
iddle1283
iddle1284
ch05list18
iddle2435
iddle1424
iddle3866
iddle4032
iddle2138
ch05list19
ch05list20
iddle1024
iddle1025
ch05sb04
iddle2136
iddle1415
iddle2437
iddle1464
ch05fn06
iddle1657
iddle1658
iddle2114
iddle1898
iddle1042
iddle1045
iddle1961
iddle1112
iddle1113
iddle2009
iddle1198
iddle1199
iddle1255
iddle1357
iddle1358
iddle2352
iddle1455
iddle2505
iddle2707
iddle1841
iddle1847
iddle2847
iddle1880
iddle1884
iddle1885
iddle1925
iddle1926
ch06lev2sec1
iddle3074
ch06list01
iddle2249
iddle2307
iddle2308
iddle2381
iddle2382
iddle2461
iddle2731
iddle2732
ch06fn01
iddle2180
iddle4410
iddle4411
ch06lev2sec2
iddle2251
ch06list02
iddle3458
iddle3583
iddle2488
iddle2489
iddle2679
iddle2680
iddle3864
iddle3865
iddle3967
iddle3968
iddle3983
iddle3984
iddle4191
iddle4274
iddle4275
iddle4317
iddle4318
iddle1730
iddle4394
ch06lev2sec3
iddle1125
iddle1126
iddle4601
iddle4602
iddle4603
iddle4606
iddle4618
iddle4619
iddle4622
iddle4829
iddle4830
iddle3589
iddle3590
iddle2203
iddle4874
iddle4875
iddle3596
iddle3597
iddle5165
iddle3926
iddle3969
iddle1563
iddle1564
iddle4096
iddle4097
ch06fn02
iddle4163
iddle4164
iddle4169
iddle1732
iddle1765
iddle1766
iddle1767
iddle1768
iddle1769
iddle1836
iddle4301
iddle4302
iddle4623
iddle4820
iddle4821
iddle4876
iddle4877
iddle3459
iddle3600
iddle1134
iddle1135
ch06list03
iddle4098
iddle2981
iddle2982
iddle3199
ch06lev2sec4
iddle3420
iddle3421
iddle1849
iddle1850
iddle3491
iddle3492
iddle1922
iddle1923
iddle1924
iddle4624
iddle4650
iddle4651
iddle4764
iddle3749
iddle4831
ch06list04
iddle3910
iddle3911
iddle3931
iddle2254
iddle2255
ch06list05
iddle4353
iddle4354
iddle4355
iddle2761
iddle2762
ch06lev2sec5
ch06list06
iddle2976
iddle2977
iddle4765
iddle4786
iddle47861
iddle4787
iddle4832
iddle4838
iddle4997
iddle4998
iddle5154
ch06fn03
iddle3598
iddle3623
iddle3685
ch06sb01
iddle1597
iddle1598
ch06lev2sec6
iddle2193
iddle2202
iddle2250
iddle3921
iddle3928
iddle2219
iddle2375
iddle2460
iddle2524
iddle2525
ch06fn04
iddle4797
iddle1733
iddle3582
iddle2267
iddle2268
iddle2269
iddle2297
ch06fn05
ch06lev2sec7
iddle3486
iddle3619
iddle3625
iddle3746
iddle3747
iddle3775
iddle3895
iddle3920
iddle4620
ch06list07
iddle3572
iddle3573
iddle3628
iddle2274
iddle2275
iddle2456
iddle2457
iddle2458
iddle4792
iddle4794
iddle4009
iddle2758
iddle2759
ch06list08
iddle5159
iddle2973
iddle2974
ch06lev2sec8
iddle1089
ch06fn06
iddle4799
iddle1256
iddle3599
iddle2128
iddle3825
iddle3826
iddle3929
iddle4017
iddle4018
iddle1852
iddle1853
iddle1854
iddle4252
iddle4267
iddle4269
iddle1913
iddle1914
iddle4400
iddle4401
iddle2234
iddle2248
iddle4635
iddle4641
iddle4672
iddle4673
iddle2563
ch06list09
iddle1445
ch06lev2sec9
iddle3830
iddle2954
iddle1710
iddle4265
iddle4266
iddle3450
iddle3581
ch06list10
iddle2151
ch06lev2sec10
iddle4090
iddle4091
iddle1292
iddle1315
iddle1316
ch06fn07
iddle2678
iddle1432
iddle1433
iddle4296
iddle4607
iddle4659
iddle4660
iddle4784
iddle1927
iddle1928
iddle4886
iddle4887
iddle4916
iddle4917
iddle4920
iddle4921
iddle4932
iddle4933
iddle1012
iddle1013
ch06list11
iddle3446
iddle3447
iddle2179
iddle2229
iddle2230
iddle1290
iddle2425
iddle2427
iddle3966
ch06list12
iddle4167
ch06lev2sec11
iddle2978
iddle2979
iddle2980
iddle2419
iddle2428
iddle2429
iddle2440
iddle5036
ch06lev2sec12
iddle3867
iddle3868
iddle3869
iddle3870
iddle3981
iddle3985
iddle3991
iddle3992
iddle3995
iddle3996
iddle4016
iddle3298
iddle1225
ch06list13
iddle4633
iddle4634
iddle4636
iddle4645
iddle4646
iddle2635
iddle2636
iddle3729
iddle1400
iddle1401
iddle1405
iddle1406
iddle4897
iddle4898
iddle3871
iddle5114
iddle5115
iddle4040
ch06sb02
ch06lev2sec13
iddle3445
iddle3451
iddle3484
iddle2165
iddle2238
iddle2265
iddle2266
iddle4647
ch06list14
iddle4858
ch06lev2sec14
iddle4067
iddle2643
iddle2644
iddle4312
ch06list15
iddle2116
iddle4628
iddle4629
ch06lev2sec15
iddle3678
iddle3679
iddle3680
iddle1317
iddle3753
iddle2169
iddle1934
ch06fn08
iddle4630
iddle4631
iddle4632
iddle4639
iddle4640
ch06fn09
ch06lev2sec16
iddle3517
iddle3518
ch06list16
iddle3958
iddle3959
iddle4241
iddle4242
iddle3633
iddle3634
ch06list17
iddle3933
iddle1043
iddle1044
iddle1296
iddle1297
iddle1298
iddle1299
ch07fn01
iddle1314
iddle1351
iddle1354
iddle4888
iddle4929
iddle4930
iddle4962
iddle4963
iddle1565
iddle1643
iddle1114
iddle1115
iddle2034
iddle1310
iddle1313
iddle2309
iddle2735
iddle2796
iddle2811
iddle2812
iddle2963
iddle2964
iddle2965
iddle2966
iddle2967
iddle2968
iddle2969
iddle2970
iddle2971
iddle2975
iddle2041
iddle2042
iddle2060
iddle2221
iddle2222
iddle2223
iddle2276
iddle2277
iddle2278
iddle2301
iddle2302
iddle2303
iddle2304
iddle2369
iddle2370
ch07list01
iddle1214
iddle1223
iddle1304
iddle3650
iddle3651
ch07list02
iddle3798
ch07lev2sec1
iddle4889
iddle4246
iddle4251
ch07sb01
iddle4467
iddle4514
iddle2157
iddle3574
iddle4609
iddle4674
iddle4675
iddle4676
iddle4684
iddle2371
iddle2394
iddle4775
iddle4776
iddle4828
iddle4841
iddle4842
iddle4843
iddle4844
iddle2538
iddle2539
iddle5014
iddle3988
iddle3989
ch07list03
iddle4196
iddle4197
iddle2785
iddle2797
iddle2820
iddle4250
ch07list04
ch07sb02
iddle4610
iddle4612
iddle4613
iddle1224
iddle1309
iddle1312
iddle4891
iddle4892
iddle4977
iddle4979
iddle5003
iddle5024
iddle5025
iddle5116
iddle5117
iddle3751
iddle2092
ch07sb03
iddle1848
ch07list05
iddle4448
ch07lev2sec2
iddle4725
iddle4779
iddle4781
iddle1311
iddle2781
iddle2782
iddle2813
iddle2814
iddle2818
iddle1352
iddle1353
iddle3557
iddle3576
iddle2158
iddle3752
iddle1684
iddle1685
ch07sb04
iddle3873
iddle3874
iddle3875
iddle1775
iddle1776
ch07lev2sec3
iddle4726
iddle2809
iddle2810
ch07list06
iddle4470
iddle1215
iddle1216
iddle4517
iddle2378
iddle2540
iddle4727
ch07sb05
iddle2783
iddle2784
iddle2801
iddle2802
iddle2803
iddle3575
iddle2815
iddle3584
iddle3585
iddle1992
iddle1993
ch07list07
ch07lev2sec4
iddle3701
iddle3702
iddle2542
iddle3953
iddle3954
iddle4611
iddle3975
iddle2786
iddle4008
iddle4657
iddle4658
iddle2805
iddle2819
iddle4833
iddle3174
iddle3175
ch07list08
iddle4471
iddle1301
iddle3604
ch07fn02
iddle3951
iddle3952
iddle4014
iddle4015
ch07lev2sec5
ch07list09
iddle2173
iddle4518
iddle2422
iddle2541
iddle2909
iddle2910
iddle2911
iddle1217
iddle1308
ch07list10
ch07sb06
ch07lev2sec6
iddle2272
iddle1132
iddle1306
iddle1307
iddle4894
iddle4457
iddle4458
ch07lev2sec7
iddle2596
iddle2597
iddle4720
iddle4721
iddle4722
iddle2788
iddle2789
iddle2806
iddle2807
iddle2016
ch07list11
iddle2282
iddle2294
iddle2424
iddle1364
iddle2672
iddle2673
iddle2681
iddle2682
iddle2808
iddle2832
iddle4472
iddle2902
iddle2903
iddle2904
iddle3990
iddle3042
iddle3053
iddle3100
iddle3108
iddle2030
iddle3299
iddle2166
ch07sb07
ch07lev2sec8
ch07fn03
ch07list12
iddle2605
iddle2606
iddle2772
iddle2773
iddle4931
iddle2822
iddle2823
iddle4118
iddle4119
iddle2983
iddle4325
iddle4326
iddle3069
iddle3169
iddle3170
ch07list13
iddle4595
iddle4596
iddle3443
iddle2094
iddle2134
iddle2183
iddle4859
iddle1011
iddle2438
iddle3872
iddle1153
iddle1336
iddle4194
iddle4195
iddle4198
iddle4199
iddle4258
iddle4262
ch07list14
iddle2921
iddle4487
iddle4493
iddle4494
iddle4495
ch07lev2sec9
iddle4788
iddle4791
ch07list15
iddle4816
iddle4817
iddle2132
iddle2270
iddle2271
iddle2462
iddle2463
ch07list16
ch07lev2sec10
ch07list17
iddle2018
iddle2133
iddle3782
ch07lev2sec11
iddle3964
iddle3965
iddle4042
iddle4043
ch07fn04
iddle1008
iddle1009
iddle4253
iddle4268
iddle4271
ch07list18
ch07list19
iddle1337
iddle1338
iddle1339
iddle2125
ch07list20
iddle2972
ch07lev2sec12
ch07fn05
iddle3560
iddle3561
iddle3562
iddle3566
ch07fn06
iddle2106
iddle2124
iddle2273
iddle2355
ch07list21
iddle4260
iddle4261
iddle4263
iddle2760
iddle3565
iddle4485
iddle4486
iddle4489
iddle3770
iddle3771
iddle1004
iddle1005
ch07list22
iddle4995
iddle2207
iddle4264
iddle3563
iddle3564
iddle4488
iddle1821
iddle1822
iddle2152
iddle4249
iddle4270
iddle2217
iddle2236
iddle2237
iddle4426
iddle4449
iddle4450
iddle4656
iddle2685
iddle2686
ch07fn07
iddle4780
iddle2953
iddle5118
ch07list23
ch07lev2sec13
ch07fn08
iddle3784
iddle3785
ch07list24
iddle4023
iddle4024
iddle4026
iddle4027
iddle4050
iddle4051
ch07list25
iddle2235
iddle2315
iddle2316
ch07sb08
iddle5153
iddle1010
iddle4681
iddle4682
iddle4744
iddle4782
iddle2929
ch07lev2sec14
iddle2955
iddle4978
iddle4981
iddle5004
iddle5005
iddle5013
iddle1355
iddle2208
iddle2231
iddle2232
iddle2241
iddle2242
iddle2523
ch07list26
ch07lev2sec15
iddle2356
iddle2357
iddle3167
iddle3168
iddle4529
iddle2648
iddle2649
iddle2650
iddle2651
iddle3632
ch07lev2sec16
ch07sb09
iddle4773
iddle4774
iddle4785
iddle1745
iddle4853
iddle4854
iddle2922
iddle2924
iddle4999
iddle5002
ch07fn09
ch07sb10
iddle3419
iddle2358
iddle4508
iddle4509
iddle2603
iddle2604
iddle1985
iddle4166
iddle1540
iddle4980
iddle2923
iddle5000
iddle4247
iddle4248
iddle4254
iddle4255
iddle4256
iddle4259
iddle4293
iddle1707
iddle1708
ch08fn01
iddle1881
iddle1882
iddle1905
iddle1906
iddle3293
iddle3294
iddle2528
iddle4731
iddle2243
iddle2244
iddle2245
iddle2247
iddle2260
iddle4975
ch08sb01
iddle3922
iddle1818
ch08lev2sec1
iddle1883
iddle1963
iddle1964
iddle2717
iddle4257
ch08sb02
iddle1475
iddle2493
iddle2494
iddle2526
ch08list01
iddle4766
iddle1817
iddle3577
iddle3578
iddle3580
ch08lev2sec2
iddle3621
iddle1220
iddle1234
iddle1235
iddle4468
iddle2200
iddle2263
iddle2264
iddle1431
iddle2517
iddle1932
iddle1933
iddle4615
iddle4616
iddle4621
iddle3942
iddle3943
iddle4752
iddle4795
iddle4375
iddle1525
iddle1526
iddle2676
iddle2677
iddle1672
iddle1673
iddle2763
iddle4608
iddle4617
iddle1729
ch08lev2sec3
iddle4648
iddle4649
iddle1784
iddle4824
iddle1950
iddle4850
ch08fn02
iddle4922
iddle4923
ch08fn03
iddle1251
iddle2246
iddle2296
iddle1476
ch08list02
iddle4374
iddle3540
iddle3541
iddle1574
iddle3631
iddle1674
iddle3897
iddle3924
iddle3955
iddle3956
ch08lev2sec4
iddle4823
iddle4319
iddle1222
iddle3208
iddle1239
iddle1252
ch08fn04
iddle3542
iddle3579
iddle4637
iddle4638
iddle3614
iddle3615
iddle3616
iddle3630
iddle4803
iddle4910
iddle4911
iddle2926
iddle2927
iddle2930
iddle2931
iddle3930
iddle3938
iddle4991
iddle4992
iddle3971
iddle3972
iddle5129
iddle5130
iddle5131
iddle3182
iddle4307
iddle4308
iddle1006
iddle1007
iddle4313
iddle4314
ch08sb03
iddle1059
ch08fn05
iddle3617
iddle3618
iddle2383
iddle2384
iddle3627
iddle1250
iddle1295
iddle3768
iddle3769
ch08fn06
iddle4665
iddle4666
ch08lev2sec5
iddle3932
iddle4763
iddle4801
iddle4834
iddle4855
iddle4987
iddle4303
iddle2989
iddle4315
iddle4316
iddle1952
iddle1953
iddle3196
iddle3197
iddle4642
iddle4643
iddle4644
iddle4683
ch08list03
iddle3664
iddle4804
iddle4835
iddle4836
iddle4856
iddle4903
iddle4904
iddle3767
iddle4925
iddle4926
iddle1527
iddle1528
iddle2607
iddle3893
iddle3894
ch08lev2sec6
iddle3973
iddle1731
iddle1736
iddle1737
iddle1738
iddle1831
ch08list04
iddle2090
ch08list05
iddle3306
iddle2298
iddle2299
iddle1032
iddle1033
iddle4599
ch08list06
iddle3532
iddle2459
iddle3586
iddle4864
iddle3755
iddle3756
iddle3828
iddle3829
iddle3832
iddle3833
iddle4996
iddle1477
iddle1529
iddle1530
iddle3925
ch08lev2sec7
iddle1575
iddle5160
iddle4052
iddle4053
iddle1739
iddle1740
ch08list07
iddle1165
iddle2142
iddle2144
iddle4598
iddle4600
iddle4805
ch08list08
iddle4865
iddle3923
iddle4142
iddle2143
ch08lev2sec8
iddle2289
iddle3171
ch08list09
iddle3548
iddle3549
iddle3550
iddle4771
iddle4772
iddle3587
iddle3588
iddle2652
iddle3626
iddle4846
iddle2764
iddle5001
iddle1062
iddle1063
ch08list10
iddle4116
iddle4117
iddle4139
iddle3172
iddle3191
iddle3253
ch08sb04
iddle4304
iddle3620
ch08list11
iddle1915
iddle4802
iddle4845
iddle4866
iddle2206
ch08list12
ch08lev2sec9
ch08fn07
iddle4443
iddle4444
iddle2577
iddle2578
ch08list13
iddle2884
iddle4793
iddle4857
iddle4914
iddle5012
ch08list14
iddle3455
iddle2163
iddle3804
iddle1699
iddle4115
iddle4165
iddle2727
ch08list15
iddle2145
iddle2176
iddle2213
ch08list16
iddle3454
iddle4967
iddle4968
ch08list17
iddle3740
iddle3741
iddle2099
iddle2941
iddle2184
iddle2214
ch08list18
iddle4427
iddle4428
iddle1110
iddle4736
iddle3976
iddle3977
iddle3978
iddle4112
iddle4113
iddle4114
iddle4956
iddle4957
iddle4958
iddle4360
iddle4361
iddle2164
iddle4483
iddle4484
iddle3827
iddle3831
iddle1907
iddle1908
iddle1981
iddle1545
iddle1630
iddle1631
iddle1644
iddle1645
ch09fn01
iddle5039
iddle1807
iddle2486
iddle2495
iddle2496
ch09lev2sec1
iddle4677
iddle1179
iddle4893
ch09lev2sec2
iddle3269
iddle3270
iddle1541
iddle1621
iddle1622
iddle1623
ch09sb01
iddle3783
iddle2998
iddle2999
iddle2059
iddle2072
iddle2073
iddle3127
iddle3225
iddle3226
iddle2187
iddle3287
iddle3288
iddle2256
iddle3408
iddle2335
iddle4243
iddle4244
iddle2483
iddle2484
iddle2485
iddle4299
iddle4300
ch09fig01
ch09list01
iddle2119
iddle2188
iddle2189
iddle2996
iddle4818
iddle4819
ch09list02
iddle2257
iddle3365
iddle3366
ch09list03
iddle3528
iddle3652
iddle3699
iddle1026
iddle1027
iddle1041
iddle4753
iddle3801
iddle3802
ch09fig02
iddle5087
iddle5088
iddle4161
iddle4162
iddle1626
iddle1627
iddle1628
ch09list04
iddle4519
iddle4522
iddle4523
iddle4526
ch09list05
iddle2063
iddle2064
iddle2065
iddle2120
iddle4754
iddle2258
iddle2262
iddle4954
iddle2366
iddle2367
iddle5023
ch09lev2sec3
iddle2490
iddle1305
ch09list06
iddle4520
iddle4521
iddle4627
ch09lev2sec4
iddle2997
iddle3000
iddle3220
iddle3221
iddle4924
iddle2336
iddle2337
iddle1398
iddle1399
ch09lev2sec5
iddle1757
iddle2420
iddle2421
iddle3904
iddle3905
ch09list07
iddle4339
iddle4340
iddle2433
iddle2434
ch09list08
iddle4625
iddle4626
iddle2646
iddle2647
iddle4909
iddle2079
iddle5084
iddle5085
iddle5086
ch09lev2sec6
iddle3231
iddle3319
iddle3320
iddle2439
iddle1446
iddle3700
iddle1469
iddle1470
ch09lev2sec7
iddle1667
iddle1668
iddle1759
iddle1760
iddle1762
iddle5026
iddle5027
iddle4226
ch09sb02
iddle2108
iddle4530
iddle4531
iddle4918
iddle4919
iddle3004
iddle1465
iddle1466
iddle1467
iddle1468
iddle3234
iddle3235
iddle3238
iddle1633
iddle1791
iddle1792
iddle1793
iddle1794
iddle1820
iddle1851
iddle1951
iddle1975
iddle4965
iddle4966
iddle2043
iddle2044
iddle2045
ch10lev2sec1
iddle1556
iddle1557
ch10fig01
iddle2319
iddle2320
iddle2372
iddle2373
ch10sb01
iddle4238
iddle1780
iddle1781
iddle1810
iddle1811
iddle4345
iddle4346
iddle4347
ch10list01
ch10lev2sec2
iddle4733
ch10list02
iddle3017
iddle3018
iddle3019
iddle3020
iddle3021
iddle3022
iddle3085
iddle3086
iddle2515
iddle2552
iddle5017
iddle5018
iddle5083
iddle5094
iddle5095
iddle5096
iddle1806
iddle3648
iddle2915
iddle3800
iddle1978
ch10list03
iddle3944
iddle3945
iddle3946
iddle3947
iddle3948
iddle3124
iddle3125
iddle2127
iddle4037
iddle3405
iddle3406
ch10fn01
ch10fn02
ch10list04
iddle2628
iddle2733
iddle2734
ch10lev2sec3
iddle1069
iddle4882
iddle4883
iddle4884
iddle4885
iddle3126
iddle3054
iddle3407
ch10sb02
iddle1447
iddle2109
ch10lev2sec4
iddle1592
iddle1648
iddle1803
ch10fn03
ch10list05
iddle1152
iddle1646
iddle1647
ch10sb03
iddle2513
iddle2514
iddle1816
iddle4459
iddle2110
iddle4905
iddle2195
ch10lev2sec5
ch10list06
iddle3081
iddle3122
iddle3123
iddle3369
iddle3370
iddle2516
iddle4694
ch10lev2sec6
iddle1802
iddle1804
iddle1805
iddle1814
iddle1819
iddle1086
iddle1087
iddle3713
iddle3714
iddle2111
ch10lev2sec7
iddle3909
iddle2196
iddle2317
iddle2318
iddle4073
ch10fn04
iddle1795
iddle1796
iddle1833
ch10list07
iddle3043
iddle3158
iddle3629
ch10lev2sec8
iddle3155
iddle1649
ch10fn05
iddle4376
ch10sb04
ch10lev2sec9
iddle4460
ch10lev2sec10
iddle4800
iddle4837
iddle4927
iddle2330
iddle2331
iddle2585
iddle2586
iddle4362
iddle4363
iddle2053
iddle2054
iddle2889
iddle1092
ch11fn01
iddle4767
iddle4768
iddle2283
iddle2284
iddle1253
iddle4976
iddle1617
iddle1655
iddle1656
iddle3660
iddle3661
ch11fn02
iddle1916
iddle1917
iddle3011
iddle3012
iddle3013
ch11lev2sec1
iddle4095
iddle4131
iddle4132
ch11sb01
iddle1714
iddle1715
iddle4367
iddle4368
iddle4369
iddle4370
iddle4371
iddle3558
iddle3559
iddle3662
iddle3786
iddle3787
iddle3962
iddle3963
iddle3993
iddle3994
iddle4806
iddle4807
ch11lev2sec2
iddle1695
iddle1696
iddle2575
iddle3252
iddle2660
iddle2661
iddle2662
iddle2663
iddle2664
iddle2665
iddle2666
iddle2668
ch11sb02
iddle1918
iddle1919
iddle3482
iddle3483
iddle1083
iddle1084
iddle1085
iddle1177
iddle2058
iddle1200
iddle4808
iddle4809
iddle3185
iddle3906
iddle1462
iddle1463
iddle3934
iddle3935
iddle3960
iddle3961
iddle3393
iddle4055
iddle3501
iddle3502
iddle3503
iddle3504
iddle3505
iddle3506
iddle1687
iddle1688
iddle1689
iddle1690
iddle1691
iddle3524
iddle2562
iddle1823
iddle1824
iddle1825
iddle1826
iddle1827
iddle1829
iddle1830
iddle2667
ch11sb03
iddle1891
iddle1892
iddle1893
iddle1894
iddle1895
iddle1077
iddle1078
iddle1079
iddle1080
iddle1954
iddle1955
iddle1956
iddle1957
iddle1958
iddle3912
iddle3913
iddle2055
iddle2056
iddle2057
iddle2943
iddle2944
iddle2945
iddle4054
iddle4074
iddle4092
iddle4093
iddle4094
iddle3236
iddle3237
iddle2362
iddle2385
iddle2386
iddle2387
iddle2388
iddle2389
iddle2390
iddle3391
iddle2450
iddle2451
iddle2452
iddle2453
iddle2454
iddle2455
iddle2498
iddle2499
iddle2500
iddle2501
ch11fig01
iddle2553
iddle2554
iddle2564
iddle2565
iddle3525
iddle3546
iddle3547
iddle2630
iddle2671
iddle2750
iddle2751
iddle2752
iddle2753
iddle2754
iddle2755
iddle2867
iddle2868
iddle3884
iddle3885
iddle4048
iddle4049
iddle4077
iddle3166
iddle3183
iddle3184
iddle3193
iddle5035
iddle5037
iddle5038
iddle1028
iddle1029
ch11list01
iddle3246
iddle3247
iddle3248
iddle3249
iddle3250
iddle1082
iddle3344
iddle3392
ch11sb04
iddle1777
iddle1778
iddle3469
iddle3470
ch11lev2sec3
iddle3567
iddle3568
iddle3569
iddle3570
iddle3571
iddle3606
iddle3690
ch11fig02
iddle3703
iddle3704
iddle3705
iddle3742
iddle3880
iddle3881
iddle3898
iddle3899
iddle3900
iddle3901
iddle3902
iddle3903
iddle3916
iddle3917
iddle3918
iddle4005
iddle4006
iddle4010
iddle4011
iddle4012
ch11lev2sec4
iddle4120
iddle4121
iddle3186
iddle3189
iddle3190
iddle4282
iddle3389
iddle3390
ch11fn03
iddle4337
iddle1608
iddle1620
iddle3456
iddle3457
iddle3472
iddle3513
iddle4442
iddle4451
iddle4452
iddle4453
iddle4454
iddle4455
iddle2220
iddle1286
iddle1287
iddle3694
iddle2410
iddle4667
iddle4668
iddle4669
iddle4687
iddle4688
iddle4689
iddle4690
iddle4691
iddle4692
ch11lev2sec5
iddle3939
iddle3940
iddle1611
iddle1612
iddle2579
iddle1692
iddle4937
iddle4938
iddle4945
iddle4180
iddle4181
iddle4185
iddle4186
ch11list02
iddle5109
iddle5110
iddle1088
iddle2471
iddle2472
iddle1195
iddle1212
iddle1281
iddle1282
ch11lev2sec6
iddle4652
iddle4653
iddle1604
iddle3986
iddle3987
iddle2467
iddle2468
iddle4951
iddle1057
iddle4229
iddle4230
iddle5030
iddle5031
iddle5032
iddle5033
iddle3762
iddle3763
ch11fn04
iddle4272
iddle4273
ch11list03
iddle1182
iddle1183
iddle2047
iddle1366
ch11fn05
iddle4078
iddle4079
ch11sb05
iddle4176
iddle3101
iddle3102
iddle3147
iddle3152
iddle2334
ch11fn06
ch11lev2sec7
iddle1227
iddle1233
iddle5034
iddle1995
iddle1996
iddle4082
iddle4177
iddle4178
iddle4182
ch11sb06
iddle2916
iddle2925
iddle1593
iddle1594
iddle3887
iddle3888
iddle4872
iddle4873
ch11fn07
ch11sb07
ch11lev2sec8
iddle4058
iddle3194
iddle3206
iddle3207
iddle2550
iddle2560
iddle2561
ch11fn08
iddle3476
iddle3509
iddle4349
ch11list04
iddle4501
iddle3854
iddle3855
iddle1081
iddle3071
iddle1161
iddle1162
iddle3090
ch11list05
iddle4762
iddle2576
iddle3304
iddle3386
iddle3387
iddle2078
ch11fn09
iddle3009
iddle3010
ch11lev2sec9
iddle3082
iddle3083
iddle4546
iddle1860
iddle1861
iddle4554
iddle4558
iddle4559
iddle4579
iddle2548
iddle2549
iddle1367
iddle3388
iddle2082
iddle3516
iddle4946
iddle5006
iddle5007
iddle5112
iddle1808
iddle3080
ch11list06
iddle3145
ch11list07
iddle3290
iddle3291
iddle3292
iddle4065
iddle4066
ch11lev2sec10
iddle1380
iddle4341
iddle4342
iddle2469
iddle1747
iddle1748
iddle4510
iddle4511
ch11fn10
ch11fn11
iddle2730
iddle4071
iddle4109
iddle4110
ch11lev2sec11
iddle4825
iddle4826
iddle2177
ch11list08
iddle3073
iddle1138
iddle3103
iddle3146
iddle3148
iddle2340
iddle2341
iddle5142
iddle2629
iddle2653
iddle2654
iddle2655
iddle4907
iddle4908
iddle2837
ch11fn12
iddle4491
ch11lev2sec12
iddle3114
iddle3149
iddle3151
iddle3154
iddle4735
iddle2186
iddle1090
iddle1091
iddle2342
ch11lev2sec13
iddle4348
iddle4350
iddle4434
iddle2466
iddle4473
iddle3803
iddle2656
iddle2657
iddle1591
iddle1713
iddle4068
iddle1074
iddle1075
iddle5059
iddle3094
iddle3095
ch11lev2sec14
iddle4351
ch11fn13
iddle3259
iddle3260
ch11fn14
iddle4499
iddle4500
iddle1473
iddle3526
iddle3797
ch11fn15
ch11sb08
iddle2684
iddle1071
iddle1072
iddle4075
iddle2869
iddle3078
iddle3079
iddle1481
ch11fig03
iddle3187
iddle3251
iddle3257
iddle3258
iddle3473
iddle3474
iddle3475
iddle3692
iddle3693
ch11fn16
iddle1615
iddle1616
iddle1618
iddle4064
iddle3355
iddle3356
iddle3358
iddle2502
iddle3527
iddle2625
iddle3607
iddle3608
iddle3610
iddle4770
iddle4076
iddle3180
iddle4943
iddle4944
iddle4949
iddle4950
iddle2674
iddle2675
iddle5111
iddle1479
iddle2615
ch12fn01
iddle1678
iddle4063
iddle1211
iddle1266
iddle1268
iddle1272
iddle5113
iddle4536
iddle1677
ch12fn02
iddle1702
iddle2310
iddle2311
ch12list01
iddle3414
iddle1779
iddle3461
iddle3462
iddle4188
iddle4189
iddle2632
ch12lev2sec1
iddle3724
iddle2085
iddle2086
ch12list02
iddle1218
iddle1219
iddle1269
ch12lev2sec2
iddle4190
ch12fn03
iddle3536
iddle1899
iddle3672
iddle3673
iddle3029
iddle3030
iddle2089
iddle4047
ch12list03
iddle3537
ch12lev2sec3
ch12sb01
iddle2845
iddle3949
iddle4059
iddle4693
iddle4709
iddle4714
iddle4140
iddle4141
iddle4151
iddle1340
iddle1341
iddle2800
ch12fn04
ch12list04
iddle4697
iddle4698
iddle4700
iddle4707
iddle4708
iddle4712
iddle3882
iddle3883
iddle4868
iddle5010
iddle4170
iddle2573
iddle1743
ch12sb02
ch12list05
iddle4663
iddle4664
iddle2161
ch12list06
iddle5008
iddle5009
ch12lev2sec4
iddle2600
iddle3688
iddle4723
iddle4724
iddle3401
iddle3402
iddle1293
iddle1294
ch12fn05
iddle4046
iddle3790
ch12lev2sec5
ch12list07
iddle1986
iddle2103
ch12list08
iddle2160
ch12list09
iddle4713
iddle4717
ch12lev2sec6
iddle1101
iddle1102
iddle2631
iddle2846
ch12list10
iddle2084
iddle2951
iddle2952
iddle2198
iddle1193
iddle3198
iddle4678
iddle4679
ch12lev2sec7
iddle3342
iddle3343
iddle4789
iddle4790
ch12list11
iddle2756
iddle2757
iddle1744
ch12fig01
iddle3896
iddle1246
iddle1247
iddle3914
iddle3915
iddle1264
iddle1265
iddle1270
iddle1271
iddle3927
iddle2162
iddle1050
iddle1076
ch12list12
iddle1123
iddle2770
iddle2771
iddle1712
ch12list13
iddle2417
iddle2418
iddle2890
ch12lev2sec8
iddle3624
iddle1585
iddle1586
ch12fn06
iddle2080
iddle4680
iddle2205
iddle4783
ch12fig02
ch12lev2sec9
iddle4942
iddle1973
iddle1974
iddle1402
iddle1403
ch12fig03
iddle3538
ch12fig04
iddle4716
iddle4798
ch12lev2sec10
iddle3471
ch12lev2sec11
iddle2988
iddle4309
iddle3687
iddle2473
iddle2474
ch12fn07
ch12fig05
iddle1392
iddle1393
iddle1394
iddle2324
iddle2325
iddle4086
iddle4695
iddle4696
iddle4699
iddle4701
ch12lev2sec12
iddle4912
iddle4913
iddle4310
iddle4311
iddle3188
ch12fn08
iddle5021
iddle5022
iddle1976
iddle1977
iddle1434
iddle1435
iddle4056
iddle4057
iddle2441
iddle2442
iddle1609
iddle1610
ch12lev2sec13
iddle3649
iddle3744
iddle3745
iddle4870
iddle4871
iddle3308
iddle3309
iddle4498
iddle3957
iddle2658
iddle2659
ch12lev2sec14
iddle4686
iddle1787
iddle1788
iddle3539
ch12sb03
iddle4153
iddle4154
iddle4155
iddle4156
iddle4614
iddle2914
iddle4901
iddle4902
iddle5069
iddle5070
iddle3256
ch12lev2sec15
iddle3380
iddle3381
iddle3382
iddle1273
iddle1274
iddle1275
iddle1276
iddle1277
ch12lev2sec16
iddle1369
iddle1370
ch12fn09
iddle4702
iddle4703
iddle4706
iddle2598
iddle2599
iddle4705
iddle4899
iddle4900
iddle1572
iddle1573
iddle2363
ch12lev2sec17
iddle1103
iddle4710
iddle4711
ch12lev2sec18
iddle4839
iddle4840
iddle1970
iddle4986
iddle3743
iddle4704
iddle1034
ch13list01
iddle1365
iddle3840
iddle3088
iddle3089
iddle3159
iddle3160
iddle1754
iddle3324
iddle3325
iddle4715
ch13fn01
ch13list02
ch13lev2sec1
iddle4441
iddle1302
iddle2281
iddle1318
iddle4556
iddle4557
iddle2359
iddle2360
iddle3254
iddle3255
iddle1448
ch13lev2sec2
iddle2361
iddle2365
ch13list03
iddle4953
iddle1812
iddle1813
iddle3695
iddle2834
iddle3039
iddle3040
ch13list04
iddle3099
iddle3110
iddle3210
iddle3286
ch13list05
ch13lev2sec3
iddle4344
iddle1303
iddle3136
iddle3140
iddle5136
iddle3810
iddle3815
iddle2804
iddle1449
ch13fn02
ch13fig01
iddle4847
iddle4848
iddle3052
iddle3055
iddle3058
iddle1587
iddle1588
iddle3098
iddle4947
iddle4948
iddle3808
iddle4952
iddle3838
ch13fn03
iddle4225
iddle1184
iddle1185
iddle1186
ch13sb01
iddle5143
ch13fn04
iddle4129
iddle3605
iddle4570
iddle3670
iddle3671
ch13fn05
iddle1188
ch13fig02
iddle2611
iddle4175
iddle5106
iddle3120
iddle2838
iddle2322
iddle2323
iddle2328
ch13sb02
iddle3084
iddle3104
iddle3115
iddle3138
iddle3139
iddle4685
iddle4906
iddle1834
iddle1835
iddle3521
iddle4984
iddle1368
iddle3137
iddle1478
ch13list06
iddle3813
iddle3814
iddle3836
iddle3837
iddle4157
iddle4069
iddle4070
iddle1187
iddle2543
iddle1997
iddle2833
ch13fn06
iddle3493
iddle4985
iddle3109
ch13fn07
ch13list07
iddle1971
iddle1972
ch13fig03
iddle2920
iddle2329
iddle3072
iddle3091
iddle1228
iddle3132
iddle3261
iddle4982
iddle4983
iddle3385
iddle2167
iddle3520
iddle1122
ch14list01
iddle1232
iddle1244
iddle1245
iddle1262
iddle1263
iddle3795
iddle3796
iddle1873
iddle18731
iddle1874
iddle1875
iddle1876
iddle1877
iddle3133
iddle3141
ch14lev2sec1
iddle4769
ch14fn01
ch14list02
iddle1987
ch14list03
iddle3806
iddle3820
iddle3839
iddle2117
ch14list04
iddle2224
ch14fn02
iddle2312
iddle2313
iddle2314
iddle4130
iddle1229
iddle1230
iddle1278
ch14lev2sec2
ch14lev2sec3
iddle2081
iddle2118
ch14fn03
ch14fn04
iddle1716
ch14fig01
ch14list05
iddle3645
iddle3646
iddle3105
iddle5019
iddle5020
iddle2181
iddle1231
iddle3642
iddle3643
iddle3644
iddle3682
iddle1267
iddle1505
iddle15051
iddle1371
iddle1372
iddle1373
iddle4387
iddle4388
iddle4389
iddle4391
iddle4393
iddle1503
iddle1507
iddle3403
iddle3404
ch14fn05
iddle1581
iddle1613
ch14list06
iddle4594
iddle1879
iddle1711
ch14fn06
iddle1887
iddle1888
iddle1889
iddle2182
ch14lev2sec4
iddle2087
ch14sb01
iddle1509
iddle2326
iddle2327
iddle3602
iddle3603
iddle1499
iddle1500
iddle15001
iddle1501
iddle1512
iddle1513
iddle2623
ch14sb02
iddle3970
ch14lev2sec5
iddle2824
iddle2835
iddle2088
ch14fn07
iddle1901
iddle1902
ch14fn08
iddle3001
iddle4320
iddle4321
iddle4322
iddle4343
iddle3111
iddle1517
ch14fn09
ch14list07
iddle3396
ch14sb03
iddle3758
iddle2508
iddle2509
ch14lev2sec6
iddle3757
iddle3759
ch14fn10
ch14lev2sec7
iddle1514
iddle3950
iddle5132
ch14sb04
iddle3330
iddle4392
iddle3163
iddle3164
iddle2510
iddle4212
ch14sb05
iddle3772
iddle3641
iddle1519
iddle1520
iddle2511
ch14list08
iddle4964
ch14lev2sec8
iddle2637
iddle5140
iddle1202
iddle3686
iddle4430
iddle4431
ch14lev2sec9
iddle1450
iddle1521
iddle1522
ch14list09
iddle3213
iddle3214
iddle2555
iddle1962
iddle3215
ch14lev2sec10
iddle5055
iddle5056
iddle3310
iddle3311
iddle3312
iddle3313
iddle3314
iddle3315
iddle3316
iddle3317
iddle3318
iddle3331
iddle3332
iddle3336
iddle3337
iddle1118
iddle5133
iddle5134
ch14lev2sec11
iddle1362
iddle2397
iddle2447
iddle1496
iddle1988
iddle1506
iddle1508
iddle1510
iddle1511
iddle3321
iddle3322
iddle3328
iddle3329
iddle3335
iddle2201
iddle3397
iddle4436
iddle5139
iddle5151
iddle3510
ch14list10
iddle1900
iddle2938
iddle2942
iddle2017
iddle2037
iddle2038
ch14sb06
iddle1495
iddle1515
iddle1516
iddle1016
iddle1104
iddle1105
iddle1106
iddle1116
iddle2279
iddle2280
iddle3323
iddle3333
iddle3334
ch14fn11
iddle1789
iddle1790
iddle5135
iddle4290
iddle4291
iddle1497
iddle1498
iddle1502
iddle1595
iddle1619
iddle3799
ch14fn12
iddle2825
ch14list11
iddle4045
iddle3068
iddle2506
iddle2507
ch14list12
iddle2101
iddle2102
iddle3346
iddle3347
iddle2798
iddle1117
iddle4506
iddle4507
iddle2403
iddle2404
iddle2405
iddle2406
iddle2407
iddle3041
iddle3706
iddle3707
iddle3760
iddle1600
iddle1601
iddle1703
ch14list13
iddle3077
iddle2174
ch14lev2sec12
iddle1504
ch14list14
iddle1203
iddle3817
iddle5048
iddle5049
iddle5100
iddle5101
iddle4143
ch14fn13
iddle4192
iddle4193
ch14lev2sec13
iddle4278
iddle4279
iddle3049
iddle3050
iddle3063
iddle3064
ch14fn14
iddle4895
iddle4896
iddle2148
iddle4591
ch14list15
iddle5137
iddle5138
iddle5141
ch14lev2sec14
iddle1858
iddle1859
iddle1989
iddle3834
iddle3835
ch14list16
ch14lev2sec15
iddle1698
iddle4088
iddle4089
ch14lev2sec16
iddle4152
iddle2939
ch14fn15
iddle4404
iddle4405
iddle4592
iddle4593
iddle1022
iddle1023
iddle1054
iddle1058
iddle1137
iddle1170
iddle1174
iddle1324
iddle1484
iddle2431
ch15fn01
iddle1755
iddle3811
iddle3812
iddle1800
ch15fn02
iddle1589
iddle1590
iddle2470
iddle1321
ch15lev2sec1
iddle1389
iddle4137
iddle1605
iddle1606
iddle2918
iddle3818
iddle3819
ch15fn03
iddle3400
ch15list01
iddle3024
iddle3087
iddle3121
ch15lev2sec2
iddle3301
iddle3305
iddle3377
iddle3378
iddle3379
iddle2917
iddle3394
iddle3395
ch15fn04
iddle3427
iddle3428
iddle3429
ch15list02
iddle3533
iddle3534
iddle3535
iddle2617
ch15fn05
iddle1139
iddle1143
iddle1169
ch15lev2sec3
iddle4083
iddle4084
iddle4085
iddle2178
iddle3657
iddle3658
iddle3691
iddle1322
iddle2377
iddle3096
iddle1602
iddle1603
iddle2095
iddle1127
iddle1168
iddle1172
iddle1173
iddle1332
ch15lev2sec4
iddle4512
iddle1523
iddle1524
iddle5045
iddle5065
iddle5123
ch15list03
iddle2332
iddle2333
iddle3307
iddle4827
ch15lev2sec5
iddle1140
ch15fig01
ch15fig02
iddle5126
ch15list04
iddle1171
ch15list05
iddle4513
iddle3515
iddle1052
iddle1055
iddle1056
ch15fn06
iddle1596
iddle1323
iddle1325
iddle2853
iddle2854
iddle2096
ch15lev2sec6
iddle2076
iddle2077
iddle1801
iddle2168
iddle3271
iddle3272
iddle4105
iddle4106
iddle3655
iddle3656
ch15lev2sec7
iddle1053
iddle1064
iddle1065
iddle4552
iddle4553
iddle3060
ch15list06
iddle4122
iddle3487
iddle3488
iddle3507
iddle5042
iddle5043
ch15fig03
iddle3165
ch15fig04
ch15fig05
iddle3788
iddle3789
iddle3302
iddle3303
ch15fn07
iddle3816
iddle3508
iddle2100
iddle3659
iddle5047
iddle5067
ch15list07
iddle5125
iddle2992
iddle1157
iddle1176
ch15lev2sec8
iddle1485
ch15list08
iddle2991
iddle1003
ch15lev2sec9
iddle5044
iddle4869
iddle3212
iddle2129
ch15fn08
ch15fn09
iddle2338
iddle2339
iddle4359
iddle1014
iddle1015
iddle1196
ch16lev2sec1
iddle1040
ch16lev2sec2
iddle3823
iddle3824
iddle4973
ch16list01
ch16fig01
ch16fn01
ch16lev2sec3
ch16fn02
iddle2892
iddle2893
iddle2894
iddle2895
iddle2908
iddle2620
ch16sb01
iddle3202
iddle3216
iddle3217
iddle3218
iddle3219
iddle3224
iddle3230
ch16fn03
iddle3444
ch16fn04
iddle5015
iddle5090
iddle5091
ch16fig02
iddle3195
iddle3200
iddle3201
iddle3205
ch16lev2sec4
iddle1119
iddle1120
iddle3222
iddle3223
iddle3263
iddle3264
iddle2155
iddle1675
iddle1763
iddle2775
ch16list02
iddle4135
iddle4224
iddle2612
iddle2613
iddle3203
iddle3204
iddle4160
iddle4233
iddle4234
ch16lev2sec5
iddle2396
ch16list03
iddle3856
iddle3411
iddle3412
iddle2190
iddle3460
iddle3463
iddle5155
iddle2614
ch16sb02
ch16lev2sec6
iddle3417
iddle3418
iddle5102
iddle5103
ch16fn05
ch16lev2sec7
iddle3413
iddle2211
iddle3464
ch16list04
iddle3554
ch16list05
iddle4013
ch16list06
ch16lev2sec8
iddle1047
iddle1048
iddle1049
iddle2739
iddle4547
iddle2949
iddle3553
iddle2529
iddle1990
ch16list07
iddle3735
iddle2699
iddle2743
iddle4562
ch16sb03
iddle2901
ch16fn06
iddle1943
iddle1944
iddle1945
iddle1968
ch16list08
iddle2696
ch16sb04
iddle1969
iddle1093
iddle1098
iddle1099
iddle1100
biblio01_001
iddle2112
biblio01_002
iddle3727
biblio01_003
biblio01_004
iddle2687
iddle2688
iddle2689
iddle2690
iddle2691
iddle2692
iddle2693
iddle2694
iddle2695
iddle2697
biblio01_005
iddle2738
biblio01_006
biblio01_007
biblio01_008
biblio01_009
iddle1456
biblio01_010
iddle4035
iddle2948
iddle1096
biblio01_011
biblio01_012
biblio01_013
iddle2535
biblio01_014
iddle2172
biblio01_015
biblio01_016
biblio01_017
iddle2744
biblio01_018
iddle1828
biblio01_019
iddle1201
biblio01_020
biblio01_021
biblio01_022
biblio01_023
biblio01_024
iddle1960
iddle2536
biblio01_025
biblio01_026
iddle3514
biblio01_027
biblio01_028
iddle2710
biblio01_029
biblio01_030
biblio01_031
biblio01_032
iddle3860
iddle3861
iddle3862
iddle3863
iddle4440
iddle2480
iddle2704
iddle4036
iddle4537
iddle4538
iddle3853
iddle3339
iddle2891
iddle4861
iddle4939
                        Java Concurrency  In Practice  Brian Göetz  Tim Peierls  Joshua Bloch  Joseph Bowbeer  David Holmes  Doug Lea                                            Addison‐Wesley Professional  ISBN‐10: 0‐321‐34960‐1  ISBN‐13: 978‐0‐321‐34960‐6 
ii  Java Concurrency In Practice    Index  Index Preface How to Use this Book  Code Examples  Acknowledgments  Chapter 1 - Introduction 1.1. A (Very) Brief History of Concurrency 1.2. Benefits of Threads 1.2.1. Exploiting Multiple Processors  1.2.2. Simplicity of Modeling  1.2.3. Simplified Handling of Asynchronous Events  1.2.4. More Responsive User Interfaces  1.3. Risks of Threads 1.3.1. Safety Hazards  1.3.2. Liveness Hazards  1.3.3. Performance Hazards  1.4. Threads are Everywhere Part I: Fundamentals Chapter 2. Thread Safety 2.1. What is Thread Safety?  2.2. Atomicity  2.3. Locking  2.4. Guarding State with Locks  2.5. Liveness and Performance  Chapter 3. Sharing Objects 3.1. Visibility  3.2. Publication and Escape  3.3. Thread Confinement  3.4. Immutability  3.5. Safe Publication  Chapter 4. Composing Objects 4.1. Designing a Thread‐safe Class  4.2. Instance Confinement  4.3. Delegating Thread Safety  4.4. Adding Functionality to Existing Thread‐safe Classes  4.5. Documenting Synchronization Policies  Chapter 5. Building Blocks 5.1. Synchronized Collections  5.2. Concurrent Collections  5.3. Blocking Queues and the Producer‐consumer Pattern  5.4. Blocking and Interruptible Methods  5.5. Synchronizers  5.6. Building an Efficient, Scalable Result Cache  Summary of Part I  ii  xiii  xiii  xiv  xv  1  2  3  3  3  3  4  5  5  6  6  8  10  11  12  13  16  19  20  23  23  26  28  31  33  37  37  39  41  47  49  51  51  54  56  59  60  64  69 
  Part II: Structuring Concurrent Applications Chapter 6. Task Execution 6.1. Executing Tasks in Threads  6.2. The Executor Framework  6.3. Finding Exploitable Parallelism  Summary  Chapter 7. Cancellation and Shutdown 7.1. Task Cancellation  7.2. Stopping a Thread‐based Service  7.3. Handling Abnormal Thread Termination  7.4. JVM Shutdown  Summary  Chapter 8. Applying Thread Pools 8.1. Implicit Couplings Between Tasks and Execution Policies  8.2. Sizing Thread Pools  8.3. Configuring ThreadPoolExecutor  8.4. Extending ThreadPoolExecutor  8.5. Parallelizing Recursive Algorithms  Summary  Chapter 9. GUI Applications 9.1. Why are GUIs Single‐threaded?  9.2. Short‐running GUI Tasks  9.3. Long‐running GUI Tasks  9.4. Shared Data Models  9.5. Other Forms of Single‐threaded Subsystems  Summary  Part III: Liveness, Performance, and Testing Chapter 10. Avoiding Liveness Hazards 10.1. Deadlock  10.2. Avoiding and Diagnosing Deadlocks  10.3. Other Liveness Hazards  Summary  Chapter 11. Performance and Scalability 11.1. Thinking about Performance  11.2. Amdahl's Law  11.3. Costs Introduced by Threads  11.4. Reducing Lock Contention  11.5. Example: Comparing Map Performance  11.6. Reducing Context Switch Overhead  Summary  Chapter 12. Testing Concurrent Programs 12.1. Testing for Correctness  12.2. Testing for Performance  12.3. Avoiding Performance Testing Pitfalls  12.4. Complementary Testing Approaches  Summary  Part IV: Advanced Topics Chapter 13 - Explicit Locks 13.1. Lock and ReentrantLock  13.2. Performance Considerations  13.3. Fairness 
iv  Java Concurrency In Practice      13.4. Choosing Between Synchronized and ReentrantLock  13.5. Read‐write Locks  Summary  Chapter 14 - Building Custom Synchronizers 14.1. Managing State Dependence  14.2. Using Condition Queues  14.3. Explicit Condition Objects  14.4. Anatomy of a Synchronizer  14.5. AbstractQueuedSynchronizer  14.6. AQS in Java.util.concurrent Synchronizer Classes  Summary  Chapter 15. Atomic Variables and Non-blocking Synchronization 15.1. Disadvantages of Locking  15.2. Hardware Support for Concurrency  15.3. Atomic Variable Classes  15.4. Non‐blocking Algorithms  Summary  Chapter 16. The Java Memory Model 16.1. What is a Memory Model, and Why would I Want One?  16.2. Publication  Summary  Appendix A. Annotations for Concurrency A.1. Class Annotations  A.2. Field and Method Annotations  Bibliography 176  176  178  179  179  183  188  189  190  192  194  195  195  196  198  201  206  207  207  211  215  216  216  216  217 
1BListing and Image Index v   Listing and Image Index  Preface Listing 1. Bad Way to Sort a List. Don't Do this.  Listing 2. Less than Optimal Way to Sort a List.  Chapter 1. Introduction Listing 1.1. Non‐thread‐safe Sequence Generator.  Figure 1.1. Unlucky Execution of UnsafeSequence.Nextvalue.  Listing 1.2. Thread‐safe Sequence Generator.  Chapter 2. Thread Safety Listing 2.1. A Stateless Servlet.  Listing 2.2. Servlet that Counts Requests without the Necessary Synchronization. Don't Do this.  Listing 2.3. Race Condition in Lazy Initialization. Don't Do this.  Listing 2.4. Servlet that Counts Requests Using AtomicLong.  Listing 2.5. Servlet that Attempts to Cache its Last Result without Adequate Atomicity. Don't Do this.  Listing 2.6. Servlet that Caches Last Result, But with Unacceptably Poor Concurrency. Don't Do this.  Listing 2.7. Code that would Deadlock if Intrinsic Locks were Not Reentrant.  Figure 2.1. Poor Concurrency of SynchronizedFactorizer.  Listing 2.8. Servlet that Caches its Last Request and Result.  Chapter 3. Sharing Objects Listing 3.1. Sharing Variables without Synchronization. Don't Do this.  Listing 3.2. Non‐thread‐safe Mutable Integer Holder.  Listing 3.3. Thread‐safe Mutable Integer Holder.  Figure 3.1. Visibility Guarantees for Synchronization.  Listing 3.4. Counting Sheep.  Listing 3.5. Publishing an Object.  Listing 3.6. Allowing Internal Mutable State to Escape. Don't Do this.  Listing 3.7. Implicitly Allowing the this Reference to Escape. Don't Do this.  Listing 3.8. Using a Factory Method to Prevent the this Reference from Escaping During Construction.  Listing 3.9. Thread Confinement of Local Primitive and Reference Variables.  Listing 3.10. Using ThreadLocal to Ensure thread Confinement.  Listing 3.11. Immutable Class Built Out of Mutable Underlying Objects.  Listing 3.12. Immutable Holder for Caching a Number and its Factors.  Listing 3.13. Caching the Last Result Using a Volatile Reference to an Immutable Holder Object.  Listing 3.14. Publishing an Object without Adequate Synchronization. Don't Do this.  v  xiv  xv  11  5  5  6  11  13  14  15  16  17  18  18  21  21  23  23  24  24  25  26  27  27  28  28  30  30  32  33  33  33 
vi  Java Concurrency In Practice    Listing 3.15. Class at Risk of Failure if Not Properly Published.  Chapter 4. Composing Objects Listing 4.1. Simple Thread‐safe Counter Using the Java Monitor Pattern.  Listing 4.2. Using Confinement to Ensure Thread Safety.  Listing 4.3. Guarding State with a Private Lock.  Listing 4.4. Monitor‐based Vehicle Tracker Implementation.  Listing 4.5. Mutable Point Class Similar to Java.awt.Point.  Listing 4.6. Immutable Point class used by DelegatingVehicleTracker.  Listing 4.7. Delegating Thread Safety to a ConcurrentHashMap.  Listing 4.8. Returning a Static Copy of the Location Set Instead of a "Live" One.  Listing 4.9. Delegating Thread Safety to Multiple Underlying State Variables.  Listing 4.10. Number Range Class that does Not Sufficiently Protect Its Invariants. Don't Do this.  Listing 4.11. Thread‐safe Mutable Point Class.  Listing 4.12. Vehicle Tracker that Safely Publishes Underlying State.  Listing 4.13. Extending Vector to have a Put‐if‐absent Method.  Listing 4.14. Non‐thread‐safe Attempt to Implement Put‐if‐absent. Don't Do this.  Listing 4.15. Implementing Put‐if‐absent with Client‐side Locking.  Listing 4.16. Implementing Put‐if‐absent Using Composition.  Chapter 5. Building Blocks Listing 5.1. Compound Actions on a Vector that may Produce Confusing Results.  Figure 5.1. Interleaving of Getlast and Deletelast that throws  ArrayIndexOutOfBoundsException.  Listing 5.2. Compound Actions on Vector Using Client‐side Locking.  Listing 5.3. Iteration that may Throw ArrayIndexOutOfBoundsException.  Listing 5.4. Iteration with Client‐side Locking.  Listing 5.5. Iterating a List with an Iterator.  Listing 5.6. Iteration Hidden within String Concatenation. Don't Do this.  Listing 5.7. ConcurrentMap Interface.  Listing 5.8. Producer and Consumer Tasks in a Desktop Search Application.  Listing 5.9. Starting the Desktop Search.  Listing 5.10. Restoring the Interrupted Status so as Not to Swallow the Interrupt.  Listing 5.11. Using CountDownLatch for Starting and Stopping Threads in Timing Tests.  Listing 5.12. Using FutureTask to Preload Data that is Needed Later.  Listing 5.13. Coercing an Unchecked Throwable to a RuntimeException.  Listing 5.14. Using Semaphore to Bound a Collection.  34  37  37  39  40  42  42  42  43  43  44  45  46  46  47  48  48  49  51  51  51  52  52  52  53  54  56  58  58  60  61  62  62  64 
1BListing and Image Index vii   Listing 5.15. Coordinating Computation in a Cellular Automaton with  Listing 5.16. Initial Cache Attempt Using HashMap and Synchronization.  Figure 5.2. Poor Concurrency of  Figure 5.3. Two Threads Computing the Same Value When Using  Listing 5.17. Replacing HashMap with ConcurrentHashMap.  Figure 5.4. Unlucky Timing that could Cause Memorizer3 to Calculate the Same Value Twice.  Listing 5.18. Memorizing Wrapper Using FutureTask.  Listing 5.19. Final Implementation of Memorizer.  Listing 5.20. Factorizing Servlet that Caches Results Using Memorizer.  Chapter 6. Task Execution Listing 6.1. Sequential Web Server.  Listing 6.2. Web Server that Starts a New Thread for Each Request.  Listing 6.3. Executor Interface.  Listing 6.4. Web Server Using a Thread Pool.  Listing 6.5. Executor that Starts a New Thread for Each Task.  Listing 6.6. Executor that Executes Tasks Synchronously in the Calling Thread.  Listing 6.7. Lifecycle Methods in ExecutorService.  Listing 6.8. Web Server with Shutdown Support.  Listing 6.9. Class Illustrating Confusing Timer Behavior.  Listing 6.10. Rendering Page Elements Sequentially.  Listing 6.11. Callable and Future Interfaces.  Listing 6.12. Default Implementation of newTaskFor in ThreadPoolExecutor.  Listing 6.13. Waiting for Image Download with Future.  Listing 6.14. QueueingFuture Class Used By ExecutorCompletionService.  Listing 6.15. Using CompletionService to Render Page Elements as they Become Available.  Listing 6.16. Fetching an Advertisement with a Time Budget.  Listing 6.17. Requesting Travel Quotes Under a Time Budget.  Chapter 7. Cancellation and Shutdown Listing 7.1. Using a Volatile Field to Hold Cancellation State.  Listing 7.2. Generating a Second's Worth of Prime Numbers.  Listing 7.3. Unreliable Cancellation that can Leave Producers Stuck in a Blocking Operation. Don't Do this.  Listing 7.4. Interruption Methods in Thread.  Listing 7.5. Using Interruption for Cancellation.  Listing 7.6. Propagating InterruptedException to Callers.  Listing 7.7. Non‐cancelable Task that Restores Interruption Before Exit.  Listing 7.8. Scheduling an Interrupt on a Borrowed Thread. Don't Do this.  64  66  66  67  67  68  68  69  69  72  72  73  74  75  75  75  77  77  78  79  80  80  81  82  82  83  84  85  86  86  87  87  88  89  90  90 
viii  Java Concurrency In Practice    Listing 7.9. Interrupting a Task in a Dedicated Thread.  Listing 7.10. Cancelling a Task Using Future.  Listing 7.11. Encapsulating Nonstandard Cancellation in a Thread by Overriding Interrupt.  Listing 7.12. Encapsulating Nonstandard Cancellation in a Task with Newtaskfor.  Listing 7.13. Producer‐Consumer Logging Service with No Shutdown Support.  Listing 7.14. Unreliable Way to Add Shutdown Support to the Logging Service.  Listing 7.15. Adding Reliable Cancellation to LogWriter.  Listing 7.16. Logging Service that Uses an ExecutorService.  Listing 7.17. Shutdown with Poison Pill.  Listing 7.18. Producer Thread for IndexingService.  Listing 7.19. Consumer Thread for IndexingService.  Listing 7.20. Using a Private Executor Whose Lifetime is Bounded by a Method Call.  Listing 7.21. ExecutorService that Keeps Track of Cancelled Tasks After Shutdown.  Listing 7.22. Using TRackingExecutorService to Save Unfinished Tasks for Later Execution.  Listing 7.23. Typical Thread‐pool Worker Thread Structure.  Listing 7.24. UncaughtExceptionHandler Interface.  Listing 7.25. UncaughtExceptionHandler that Logs the Exception.  Listing 7.26. Registering a Shutdown Hook to Stop the Logging Service.  Chapter 8. Applying Thread Pools Listing 8.1. Task that Deadlocks in a Single‐threaded Executor. Don't Do this.  Listing 8.2. General Constructor for ThreadPoolExecutor.  91  92  93  94  95  95  96  97  97  98  98  98  99  100  101  101  101  103  104  105  107  Listing 8.3. Creating a Fixed‐sized Thread Pool with a Bounded Queue and the Caller‐runs Saturation Policy.  109  Listing 8.4. Using a Semaphore to Throttle Task Submission.  Listing 8.5. ThreadFactory Interface.  Listing 8.6. Custom Thread Factory.  Listing 8.7. Custom Thread Base Class.  Listing 8.8. Modifying an Executor Created with the Standard Factories.  Listing 8.9. Thread Pool Extended with Logging and Timing.  Listing 8.10. Transforming Sequential Execution into Parallel Execution.  Listing 8.11. Transforming Sequential Tail‐recursion into Parallelized Recursion.  Listing 8.12. Waiting for Results to be Calculated in Parallel.  Listing 8.13. Abstraction for Puzzles Like the "Sliding Blocks Puzzle".  Listing 8.14. Link Node for the Puzzle Solver Framework.  Listing 8.15. Sequential Puzzle Solver.  Listing 8.16. Concurrent Version of Puzzle Solver.  Listing 8.17. Result‐bearing Latch Used by ConcurrentPuzzleSolver.  109  109  110  111  111  112  112  113  113  113  114  115  115  116 
分享到:
收藏