๐”– Scriptorium
โœฆ   LIBER   โœฆ

๐Ÿ“

Java concurrency in practice

โœ Scribed by Brian Goetz, Tim Peierls


Publisher
Addison-Wesley
Year
2006
Tongue
English
Leaves
425
Edition
1
Category
Library

โฌ‡  Acquire This Volume

No coin nor oath required. For personal study only.

โœฆ Synopsis


I was fortunate indeed to have worked with a fantastic team on the design and implementation of the concurrency features added to the Java platform in Java 5.0 and Java 6. Now this same team provides the best explanation yet of these new features, and of concurrency in general. Concurrency is no longer a subject for advanced users only. Every Java developer should read this book.--Martin BuchholzJDK Concurrency Czar, Sun Microsystems"For the past 30 years, computer performance has been driven by Moore's Law; from now on, it will be driven by Amdahl's Law. Writing code that effectively exploits multiple processors can be very challenging. Java Concurrency in Practice provides you with the concepts and techniques needed to write safe and scalable Java programs for today's--and tomorrow's--systems."--Doron RajwanResearch Scientist, Intel Corp"This is the book you need if you're writing--or designing, or debugging, or maintaining, or contemplating--multithreaded Java programs. If you've ever had to synchronize a method and you weren't sure why, you owe it to yourself and your users to read this book, cover to cover."--Ted NewardAuthor of Effective Enterprise Java"Brian addresses the fundamental issues and complexities of concurrency with uncommon clarity. This book is a must-read for anyone who uses threads and cares about performance."--Kirk PepperdineCTO, JavaPerformanceTuning.com"This book covers a very deep and subtle topic in a very clear and concise way, making it the perfect Java Concurrency reference manual. Each page is filled with the problems (and solutions!) that programmers struggle with every day. Effectively exploiting concurrency is becoming more and more important now that Moore's Law is delivering more cores but not faster cores, and this book will show you how to do it."--Dr. Cliff ClickSenior Software Engineer, Azul Systems"I have a strong interest in concurrency, and have probably written more thread deadlocks and made more synchronization mistakes than most programmers. Brian's book is the most readable on the topic of threading and concurrency in Java, and deals with this difficult subject with a wonderful hands-on approach. This is a book I am recommending to all my readers of The Java Specialists' Newsletter, because it is interesting, useful, and relevant to the problems facing Java developers today."--Dr. Heinz KabutzThe Java Specialists' Newsletter"I've focused a career on simplifying simple problems, but this book ambitiously and effectively works to simplify a complex but critical subject: concurrency. Java Concurrency in Practice is revolutionary in its approach, smooth and easy in style, and timely in its delivery--it's destined to be a very important book."--Bruce TateAuthor of Beyond Java"Java Concurrency in Practice is an invaluable compilation of threading know-how for Java developers. I found reading this book intellectually exciting, in part because it is an excellent introduction to Java's concurrency API, but mostly because it captures in a thorough and accessible way expert knowledge on threading not easily found elsewhere."--Bill VennersAuthor of Inside the Java Virtual MachineThreads are a fundamental part of the Java platform. As multicore processors become the norm, using concurrency effectively becomes essential for building high-performance applications. Java SE 5 and 6 are a huge step forward for the development of concurrent applications, with improvements to the Java Virtual Machine to support high-performance, highly scalable concurrent classes and a rich set of new concurrency building blocks. In Java Concurrency in Practice, the creators of these new facilities explain not only how they work and how to use them, but also the motivation and design patterns behind them.However, developing, testing, and debugging multithreaded programs can still be very difficult; it is all too easy to create concurrent programs that appear to work, but fail when it matters most: in production, under heavy load. Java Concurrency in Practice arms readers with both the theoretical underpinnings and concrete techniques for building reliable, scalable, maintainable concurrent applications. Rather than simply offering an inventory of concurrency APIs and mechanisms, it provides design rules, patterns, and mental models that make it easier to build concurrent programs that are both correct and performant.This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Performance optimization dos and don'ts Testing concurrent programs Advanced topics such as atomic variables, nonblocking algorithms, and the Java Memory Model

โœฆ Table of Contents


Contents......Page 10
Listings......Page 13
Preface......Page 18
1.1 A (very) brief history of concurrency......Page 22
1.2 Benefits of threads......Page 24
1.3 Risks of threads......Page 26
1.4 Threads are everywhere......Page 30
I: Fundamentals......Page 34
2 Thread Safety......Page 36
2.1 What is thread safety?......Page 38
2.2 Atomicity......Page 40
2.3 Locking......Page 44
2.4 Guarding statewith locks......Page 48
2.5 Liveness and performance......Page 50
3.1 Visibility......Page 54
3.2 Publication and escape......Page 60
3.3 Thread confinement......Page 63
3.4 Immutability......Page 67
3.5 Safe publication......Page 70
4.1 Designing a thread-safe class......Page 76
4.2 Instance confinement......Page 79
4.3 Delegating thread safety......Page 83
4.4 Adding functionality to existing thread-safe classes......Page 92
4.5 Documenting synchronization policies......Page 95
5.1 Synchronized collections......Page 100
5.2 Concurrent collections......Page 105
5.3 Blocking queues and the producer-consumer pattern......Page 108
5.4 Blocking and interruptible methods......Page 113
5.5 Synchronizers......Page 115
5.6 Building an efficient, scalable result cache......Page 122
II: Structuring Concurrent Applications......Page 132
6.1 Executing tasks in threads......Page 134
6.2 The Executor framework......Page 138
6.3 Finding exploitable parallelism......Page 144
7.1 Task cancellation......Page 156
7.2 Stopping a thread-based service......Page 171
7.3 Handling abnormal thread termination......Page 182
7.4 JVM shutdown......Page 185
8.1 Implicit couplings between tasks and execution policies......Page 188
8.2 Sizing thread pools......Page 191
8.3 Configuring ThreadPoolExecutor......Page 192
8.4 Extending ThreadPoolExecutor......Page 200
8.5 Parallelizing recursive algorithms......Page 202
9.1 Why are GUIs single-threaded?......Page 210
9.2 Short-running GUI tasks......Page 213
9.3 Long-running GUI tasks......Page 216
9.4 Shared data models......Page 219
9.5 Other forms of single-threaded subsystems......Page 223
III: Liveness, Performance, and Testing......Page 224
10.1 Deadlock......Page 226
10.2 Avoiding and diagnosing deadlocks......Page 236
10.3 Other liveness hazards......Page 239
11.1 Thinking about performance......Page 242
11.2 Amdahlโ€™s law......Page 246
11.3 Costs introduced by threads......Page 250
11.4 Reducing lock contention......Page 253
11.5 Example: Comparing Map performance......Page 263
11.6 Reducing context switch overhead......Page 264
12 Testing Concurrent Programs......Page 268
12.1 Testing for correctness......Page 269
12.2 Testing for performance......Page 281
12.3 Avoiding performance testing pitfalls......Page 287
12.4 Complementary testing approaches......Page 291
IV: Advanced Topics......Page 296
13.1 Lock and ReentrantLock......Page 298
13.2 Performance considerations......Page 303
13.3 Fairness......Page 304
13.4 Choosing between synchronized and ReentrantLock......Page 306
13.5 Read-write locks......Page 307
14.1 Managing state dependence......Page 312
14.2 Using condition queues......Page 319
14.3 Explicit condition objects......Page 327
14.4 Anatomy of a synchronizer......Page 329
14.5 AbstractQueuedSynchronizer......Page 332
14.6 AQS in java.util.concurrent synchronizer classes......Page 335
15.1 Disadvantages of locking......Page 340
15.2 Hardware support for concurrency......Page 342
15.3 Atomic variable classes......Page 345
15.4 Nonblocking algorithms......Page 350
16.1 What is a memory model, and why would I want one?......Page 358
16.2 Publication......Page 365
16.3 Initialization safety......Page 370
A.2 Field and method annotations......Page 374
Bibliography......Page 376
A......Page 380
B......Page 382
C......Page 383
D......Page 388
E......Page 390
F......Page 393
G......Page 395
H......Page 396
I......Page 397
J......Page 399
L......Page 400
M......Page 402
O......Page 404
P......Page 405
R......Page 409
S......Page 412
T......Page 418
U......Page 422
V......Page 423
W......Page 424


๐Ÿ“œ SIMILAR VOLUMES


Java Concurrency in Practice
โœ Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea ๐Ÿ“‚ Library ๐Ÿ“… 2006 ๐Ÿ› Addison-Wesley Professional ๐ŸŒ English

"I was fortunate indeed to have worked with a fantastic team on the design and implementation of the concurrency features added to the Java platform in Java 5.0 and Java 6. Now this same team provides the best explanation yet of these new features, and of concurrency in general. Concurrency is no lo

Java concurrency in practice
โœ Brian Goetz, Tim Peierls ๐Ÿ“‚ Library ๐Ÿ“… 2006 ๐Ÿ› Addison-Wesley ๐ŸŒ English

I was fortunate indeed to have worked with a fantastic team on the design and implementation of the concurrency features added to the Java platform in Java 5.0 and Java 6. Now this same team provides the best explanation yet of these new features, and of concurrency in general. Concurrency is no lon

Java Concurrency in Practice
โœ Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea ๐Ÿ“‚ Library ๐Ÿ“… 2006 ๐Ÿ› Addison-Wesley Professional ๐ŸŒ English

I was fortunate indeed to have worked with a fantastic team on the design and implementation of the concurrency features added to the Java platform in Java 5.0 and Java 6. Now this same team provides the best explanation yet of these new features, and of concurrency in general. Concurrency is no lon

Java Concurrency in Practice
โœ Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea ๐Ÿ“‚ Library ๐Ÿ“… 2006 ๐Ÿ› Addison-Wesley Professional ๐ŸŒ English

I was fortunate indeed to have worked with a fantastic team on the design and implementation of the concurrency features added to the Java platform in Java 5.0 and Java 6. Now this same team provides the best explanation yet of these new features, and of concurrency in general. Concurrency is no lon

Java Concurrency in Practice
โœ Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea ๐Ÿ“‚ Library ๐Ÿ“… 2006 ๐Ÿ› Addison-Wesley Professional ๐ŸŒ English

As processors become faster and multiprocessor systems become cheaper, the need to take advantage of multithreading in order to achieve full hardware resource utilization only increases the importance of being able to incorporate concurrency in a wide variety of application categories. For many deve