加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Java Concurrency in Practice

Java Concurrency in Practice.pdf

Java Concurrency in Practice

cigarette
2011-04-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《Java Concurrency in Practicepdf》,可适用于IT/计算机领域

            Java Concurrency In Practice Brian Göetz Tim Peierls Joshua Bloch Joseph Bowbeer David Holmes Doug Lea                     Addison‐Wesley Professional ISBN‐: ‐‐‐ ISBN‐: ‐‐‐‐   ii Java Concurrency In Practice Index Indexii Prefacexiii How to Use this Book xiii Code Examples xiv Acknowledgments xv ChapterIntroduction A(Very)BriefHistoryofConcurrency BenefitsofThreads  Exploiting Multiple Processors   Simplicity of Modeling   Simplified Handling of Asynchronous Events   More Responsive User Interfaces  RisksofThreads  Safety Hazards   Liveness Hazards   Performance Hazards  ThreadsareEverywhere PartI:Fundamentals ChapterThreadSafety  What is Thread Safety   Atomicity   Locking   Guarding State with Locks   Liveness and Performance  ChapterSharingObjects  Visibility   Publication and Escape   Thread Confinement   Immutability   Safe Publication  ChapterComposingObjects  Designing a Thread‐safe Class   Instance Confinement   Delegating Thread Safety   Adding Functionality to Existing Thread‐safe Classes   Documenting Synchronization Policies  ChapterBuildingBlocks  Synchronized Collections   Concurrent Collections   Blocking Queues and the Producer‐consumer Pattern   Blocking and Interruptible Methods   Synchronizers   Building an Efficient, Scalable Result Cache  Summary of Part I   iii<IndexPartII:StructuringConcurrentApplications ChapterTaskExecution  Executing Tasks in Threads   The Executor Framework   Finding Exploitable Parallelism  Summary  ChapterCancellationandShutdown  Task Cancellation   Stopping a Thread‐based Service   Handling Abnormal Thread Termination   JVM Shutdown  Summary  ChapterApplyingThreadPools  Implicit Couplings Between Tasks and Execution Policies   Sizing Thread Pools   Configuring ThreadPoolExecutor   Extending ThreadPoolExecutor   Parallelizing Recursive Algorithms  Summary  ChapterGUIApplications  Why are GUIs Single‐threaded   Short‐running GUI Tasks   Long‐running GUI Tasks   Shared Data Models   Other Forms of Single‐threaded Subsystems  Summary  PartIII:Liveness,Performance,andTesting ChapterAvoidingLivenessHazards  Deadlock   Avoiding and Diagnosing Deadlocks   Other Liveness Hazards  Summary  ChapterPerformanceandScalability  Thinking about Performance   Amdahl's Law   Costs Introduced by Threads   Reducing Lock Contention   Example: Comparing Map Performance   Reducing Context Switch Overhead  Summary  ChapterTestingConcurrentPrograms  Testing for Correctness   Testing for Performance   Avoiding Performance Testing Pitfalls   Complementary Testing Approaches  Summary  PartIV:AdvancedTopics ChapterExplicitLocks  Lock and ReentrantLock   Performance Considerations   Fairness   iv Java Concurrency In Practice  Choosing Between Synchronized and ReentrantLock   Read‐write Locks  Summary  ChapterBuildingCustomSynchronizers  Managing State Dependence   Using Condition Queues   Explicit Condition Objects   Anatomy of a Synchronizer   AbstractQueuedSynchronizer   AQS in Javautilconcurrent Synchronizer Classes  Summary  ChapterAtomicVariablesandNonblockingSynchronization  Disadvantages of Locking   Hardware Support for Concurrency   Atomic Variable Classes   Non‐blocking Algorithms  Summary  ChapterTheJavaMemoryModel  What is a Memory Model, and Why would I Want One   Publication  Summary  AppendixAAnnotationsforConcurrency A Class Annotations  A Field and Method Annotations  Bibliography   vBListing and Image IndexListing and Image Index Prefacev Listing  Bad Way to Sort a List Don't Do this xiv Listing  Less than Optimal Way to Sort a List xv ChapterIntroduction Listing  Non‐thread‐safe Sequence Generator  Figure  Unlucky Execution of UnsafeSequenceNextvalue  Listing  Thread‐safe Sequence Generator  ChapterThreadSafety Listing  A Stateless Servlet  Listing  Servlet that Counts Requests without the Necessary Synchronization Don't Do this  Listing  Race Condition in Lazy Initialization Don't Do this  Listing  Servlet that Counts Requests Using AtomicLong  Listing  Servlet that Attempts to Cache its Last Result without Adequate Atomicity Don't Do this  Listing  Servlet that Caches Last Result, But with Unacceptably Poor Concurrency Don't Do this  Listing  Code that would Deadlock if Intrinsic Locks were Not Reentrant  Figure  Poor Concurrency of SynchronizedFactorizer  Listing  Servlet that Caches its Last Request and Result  ChapterSharingObjects Listing  Sharing Variables without Synchronization Don't Do this  Listing  Non‐thread‐safe Mutable Integer Holder  Listing  Thread‐safe Mutable Integer Holder  Figure  Visibility Guarantees for Synchronization  Listing  Counting Sheep  Listing  Publishing an Object  Listing  Allowing Internal Mutable State to Escape Don't Do this  Listing  Implicitly Allowing the this Reference to Escape Don't Do this  Listing  Using a Factory Method to Prevent the this Reference from Escaping During Construction  Listing  Thread Confinement of Local Primitive and Reference Variables  Listing  Using ThreadLocal to Ensure thread Confinement  Listing  Immutable Class Built Out of Mutable Underlying Objects  Listing  Immutable Holder for Caching a Number and its Factors  Listing  Caching the Last Result Using a Volatile Reference to an Immutable Holder Object  Listing  Publishing an Object without Adequate Synchronization Don't Do this   vi Java Concurrency In Practice Listing  Class at Risk of Failure if Not Properly Published  ChapterComposingObjects Listing  Simple Thread‐safe Counter Using the Java Monitor Pattern  Listing  Using Confinement to Ensure Thread Safety  Listing  Guarding State with a Private Lock  Listing  Monitor‐based Vehicle Tracker Implementation  Listing  Mutable Point Class Similar to JavaawtPoint  Listing  Immutable Point class used by DelegatingVehicleTracker  Listing  Delegating Thread Safety to a ConcurrentHashMap  Listing  Returning a Static Copy of the Location Set Instead of a "Live" One  Listing  Delegating Thread Safety to Multiple Underlying State Variables  Listing  Number Range Class that does Not Sufficiently Protect Its Invariants Don't Do this  Listing  Thread‐safe Mutable Point Class  Listing  Vehicle Tracker that Safely Publishes Underlying State  Listing  Extending Vector to have a Put‐if‐absent Method  Listing  Non‐thread‐safe Attempt to Implement Put‐if‐absent Don't Do this  Listing  Implementing Put‐if‐absent with Client‐side Locking  Listing  Implementing Put‐if‐absent Using Composition  ChapterBuildingBlocks Listing  Compound Actions on a Vector that may Produce Confusing Results  Figure  Interleaving of Getlast and Deletelast that throws ArrayIndexOutOfBoundsException  Listing  Compound Actions on Vector Using Client‐side Locking  Listing  Iteration that may Throw ArrayIndexOutOfBoundsException  Listing  Iteration with Client‐side Locking  Listing  Iterating a List with an Iterator  Listing  Iteration Hidden within String Concatenation Don't Do this  Listing  ConcurrentMap Interface  Listing  Producer and Consumer Tasks in a Desktop Search Application  Listing  Starting the Desktop Search  Listing  Restoring the Interrupted Status so as Not to Swallow the Interrupt  Listing  Using CountDownLatch for Starting and Stopping Threads in Timing Tests  Listing  Using FutureTask to Preload Data that is Needed Later  Listing  Coercing an Unchecked Throwable to a RuntimeException  Listing  Using Semaphore to Bound a Collection   viiBListing and Image IndexListing  Coordinating Computation in a Cellular Automaton with  Listing  Initial Cache Attempt Using HashMap and Synchronization  Figure  Poor Concurrency of  Figure  Two Threads Computing the Same Value When Using  Listing  Replacing HashMap with ConcurrentHashMap  Figure  Unlucky Timing that could Cause Memorizer to Calculate the Same Value Twice  Listing  Memorizing Wrapper Using FutureTask  Listing  Final Implementation of Memorizer  Listing  Factorizing Servlet that Caches Results Using Memorizer  ChapterTaskExecution Listing  Sequential Web Server  Listing  Web Server that Starts a New Thread for Each Request  Listing  Executor Interface  Listing  Web Server Using a Thread Pool  Listing  Executor that Starts a New Thread for Each Task  Listing  Executor that Executes Tasks Synchronously in the Calling Thread  Listing  Lifecycle Methods in ExecutorService  Listing  Web Server with Shutdown Support  Listing  Class Illustrating Confusing Timer Behavior  Listing  Rendering Page Elements Sequentially  Listing  Callable and Future Interfaces  Listing  Default Implementation of newTaskFor in ThreadPoolExecutor  Listing  Waiting for Image Download with Future  Listing  QueueingFuture Class Used By ExecutorCompletionService  Listing  Using CompletionService to Render Page Elements as they Become Available  Listing  Fetching an Advertisement with a Time Budget  Listing  Requesting Travel Quotes Under a Time Budget  ChapterCancellationandShutdown Listing  Using a Volatile Field to Hold Cancellation State  Listing  Generating a Second's Worth of Prime Numbers  Listing  Unreliable Cancellation that can Leave Producers Stuck in a Blocking Operation Don't Do this  Listing  Interruption Methods in Thread  Listing  Using Interruption for Cancellation  Listing  Propagating InterruptedException to Callers  Listing  Non‐cancelable Task that Restores Interruption Before Exit  Listing  Scheduling an Interrupt on a Borrowed Thread Don't Do this   viii Java Concurrency In Practice Listing  Interrupting a Task in a Dedicated Thread  Listing  Cancelling a Task Using Future  Listing  Encapsulating Nonstandard Cancellation in a Thread by Overriding Interrupt  Listing  Encapsulating Nonstandard Cancellation in a Task with Newtaskfor  Listing  Producer‐Consumer Logging Service with No Shutdown Support  Listing  Unreliable Way to Add Shutdown Support to the Logging Service  Listing  Adding Reliable Cancellation to LogWriter  Listing  Logging Service that Uses an ExecutorService  Listing  Shutdown with Poison Pill  Listing  Producer Thread for IndexingService  Listing  Consumer Thread for IndexingService  Listing  Using a Private Executor Whose Lifetime is Bounded by a Method Call  Listing  ExecutorService that Keeps Track of Cancelled Tasks After Shutdown  Listing  Using TRackingExecutorService to Save Unfinished Tasks for Later Execution  Listing  Typical Thread‐pool Worker Thread Structure  Listing  UncaughtExceptionHandler Interface  Listing  UncaughtExceptionHandler that Logs the Exception  Listing  Registering a Shutdown Hook to Stop the Logging Service  ChapterApplyingThreadPools Listing  Task that Deadlocks in a Single‐threaded Executor Don't Do this  Listing  General Constructor for ThreadPoolExecutor  Listing  Creating a Fixed‐sized Thread Pool with a Bounded Queue and the Caller‐runs Saturation Policy  Listing  Using a Semaphore to Throttle Task Submission  Listing  ThreadFactory Interface  Listing  Custom Thread Factory  Listing  Custom Thread Base Class  Listing  Modifying an Executor Created with the Standard Factories  Listing  Thread Pool Extended with Logging and Timing  Listing  Transforming Sequential Execution into Parallel Execution  Listing  Transforming Sequential Tail‐recursion into Parallelized Recursion  Listing  Waiting for Results to be Calculated in Parallel  Listing  Abstraction for Puzzles Like the "Sliding Blocks Puzzle"  Listing  Link Node for the Puzzle Solver Framework  Listing  Sequential Puzzle Solver  Listing  Concurrent Version of Puzzle Solver  Listing  Result‐bearing Latch Used by ConcurrentPuzzleSolver   ixBListing and Image IndexListing  Solver that Recognizes when No Solution Exists  ChapterGUIApplications Figure  Control Flow of a Simple Button Click  Listing  Implementing SwingUtilities Using an Executor  Listing  Executor Built Atop SwingUtilities  Listing  Simple Event Listener  Figure  Control Flow with Separate Model and View Objects  Listing  Binding a Long‐running Task to a Visual Component  Listing  Long‐running Task with User Feedback  Listing  Cancelling a Long‐running Task  Listing  Background Task Class Supporting Cancellation, Completion Notification, and Progress Notification  Listing  Initiating a Long‐running, Cancellable Task with BackgroundTask  ChapterAvoidingLivenessHazards Figure  Unlucky Timing in LeftRightDeadlock  Listing  Simple Lock‐ordering Deadlock Don't Do this  Listing  Dynamic Lock‐ordering Deadlock Don't Do this  Listing  Inducing a Lock Ordering to Avoid Deadlock  Listing  Driver Loop that Induces Deadlock Under Typical Conditions  Listing  Lock‐ordering Deadlock Between Cooperating Objects Don't Do this  Listing  Using Open Calls to Avoiding Deadlock Between Cooperating Objects  Listing  Portion of Thread Dump After Deadlock  ChapterPerformanceandScalability Figure  Maximum Utilization Under Amdahl's Law for Various Serialization Percentages  Listing  Serialized Access to a Task Queue  Figure  Comparing Queue Implementations  Listing  Synchronization that has No Effect Don't Do this  Listing  Candidate for Lock Elision  Listing  Holding a Lock Longer than Necessary  Listing  Reducing Lock Duration  Listing  Candidate for Lock Splitting  Listing  ServerStatus Refactored to Use Split Locks  Listing  Hash‐based Map Using Lock Striping  Figure  Comparing Scalability of Map Implementations  ChapterTestingConcurrentPrograms Listing  Bounded Buffer Using Semaphore   x Java Concurrency In Practice Listing  Basic Unit Tests for BoundedBuffer  Listing  Testing Blocking and Responsiveness to Interruption  Listing  Medium‐quality Random Number Generator Suitable for Testing  Listing  Producer‐consumer Test Program for BoundedBuffer  Listing  Producer and Consumer Classes Used in PutTakeTest  Listing  Testing for Resource Leaks  Listing  Thread Factory for Testing ThreadPoolExecutor  Listing  Test Method to Verify Thread Pool Expansion  Listing  Using Threadyield to Generate More Interleavings  Listing  Barrier‐based Timer  Figure  TimedPutTakeTest with Various Buffer Capacities  Listing  Testing with a Barrier‐based Timer  Listing  Driver Program ‐ for TimedPutTakeTest  Figure  Comparing Blocking Queue Implementations  Figure  Completion Time Histogram for TimedPutTakeTest with Default (Non‐fair) and Fair Semaphores  Figure  Completion Time Histogram for TimedPutTakeTest with Single‐item Buffers  Figure  Results Biased by Dynamic Compilation  ChapterExplicitLocks Listing  Lock Interface  Listing  Guarding Object State Using ReentrantLock  Listing  Avoiding Lock‐ordering Deadlock Using trylock  Listing  Locking with a Time Budget  Listing  Interruptible Lock Acquisition  Figure  Intrinsic Locking Versus ReentrantLock Performance on Java  and Java   Figure  Fair Versus Non‐fair Lock Performance  Listing  ReadWriteLock Interface  Listing  Wrapping a Map with a Read‐write Lock  Figure  Read‐write Lock Performance  ChapterBuildingCustomSynchronizers Listing  Structure of Blocking State‐dependent Actions  Listing  Base Class for Bounded Buffer Implementations  Listing  Bounded Buffer that Balks When Preconditions are Not Met  Listing  Client Logic for Calling GrumpyBoundedBuffer  Figure  Thread Oversleeping Because the Condition Became True Just After It Went to Sleep  Listing  Bounded Buffer Using Crude Blocking   xiBListing and Image IndexListing  Bounded Buffer Using Condition Queues  Listing  Canonical Form for State‐dependent Methods  Listing  Using Conditional Notification in BoundedBufferput  Listing  Recloseable Gate Using Wait and Notifyall  Listing  Condition Interface  Listing  Bounded Buffer Using Explicit Condition Variables  Listing  Counting Semaphore Implemented Using Lock  Listing  Canonical Forms for Acquisition and Release in AQS  Listing  Binary Latch Using AbstractQueuedSynchronizer  Listing  tryAcquire Implementation From Non‐fair ReentrantLock  Listing  tryacquireshared and tryreleaseshared from Semaphore  ChapterAtomicVariablesandNonblockingSynchronization Listing  Simulated CAS Operation  Listing  Non‐blocking Counter Using CAS  Listing  Preserving Multivariable Invariants Using CAS  Figure  Lock and AtomicInteger Performance Under High Contention  Figure  Lock and AtomicInteger Performance Under Moderate Contention  Listing  Random Number Generator Using ReentrantLock  Listing  Random Number Generator Using AtomicInteger

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/47

Java Concurrency in Practice

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利