1) Грегори Р. Эндрюс "Основы многопоточного, параллельного и распределенного программирования" (есть у Игоря в djvu, у Ивана и Романа - в бумажном виде). Отличная книга, стоит иметь на книжной полке. Я купил в Буксе за 40 гривен. Много теории не привязанной к конкретному языку, более 250 упражнений (вообще великолепно:)). Настоящий университетский учебник.
2) "Java Thread Programming" by Paul Hyde Sams © 1999, 510 pages, ISBN: 0672315858. Очень хорошая книга для старта. Автор разбирает большинство моментов программирования потоков именно на яве. Вот оглавление:
Part I Threads Chapter 1 - Introduction to Threads Chapter 2 - A Simple Two-Thread Example Chapter 3 - Creating and Starting a Thread Chapter 4 - Implementing Runnable Versus Extending Thread Chapter 5 - Gracefully Stopping Threads Chapter 6 - Thread Prioritization Chapter 7 - Concurrent Access to Objects and Variables Chapter 8 - Inter-thread Communication Chapter 9 - Threads and Swing Chapter 10 - Thread Groups Part II Techniques Chapter 11 - Self-Running Objects Chapter 12 - Exception Callback Chapter 13 - Thread Pooling Chapter 14 - Waiting for the Full Timeout Chapter 15 - Breaking Out of a Blocked I/O State Chapter 16 - The SureStop Utility Chapter 17 - The BooleanLock Utility Chapter 18 - First-In-First-Out (FIFO) Queue Part III Appendixes Appendix A - The Thread API Appendix B - The ThreadGroup API
3) "Java Threads", O'Reilly, Third Edition, September 2004, 360 pages. По "мощности" аналогична предидущей. Содержание:
Copyright Preface Who Should Read This Book? Versions Used in This Book What's New in This Edition? Organization of This Book Conventions Used in This Book Code Examples How to Contact Us Safari Enabled Acknowledgments Chapter 1. Introduction to Threads Section 1.1. Java Terms Section 1.2. About the Examples Section 1.3. Why Threads? Section 1.4. Summary Chapter 2. Thread Creation and Management Section 2.1. What Is a Thread? Section 2.2. Creating a Thread Section 2.3. The Lifecycle of a Thread Section 2.4. Two Approaches to Stopping a Thread Section 2.5. The Runnable Interface Section 2.6. Threads and Objects Section 2.7. Summary Chapter 3. Data Synchronization Section 3.1. The Synchronized Keyword Section 3.2. The Volatile Keyword Section 3.3. More on Race Conditions Section 3.4. Explicit Locking Section 3.5. Lock Scope Section 3.6. Choosing a Locking Mechanism Section 3.7. Nested Locks Section 3.8. Deadlock Section 3.9. Lock Fairness Section 3.10. Summary Chapter 4. Thread Notification Section 4.1. Wait and Notify Section 4.2. Condition Variables Section 4.3. Summary Chapter 5. Minimal Synchronization Techniques Section 5.1. Can You Avoid Synchronization? Section 5.2. Atomic Variables Section 5.3. Thread Local Variables Section 5.4. Summary Chapter 6. Advanced Synchronization Topics Section 6.1. Synchronization Terms Section 6.2. Synchronization Classes Added in J2SE 5.0 Section 6.3. Preventing Deadlock Section 6.4. Deadlock Detection Section 6.5. Lock Starvation Section 6.6. Summary Chapter 7. Threads and Swing Section 7.1. Swing Threading Restrictions Section 7.2. Processing on the Event-Dispatching Thread Section 7.3. Using invokeLater( ) and invokeAndWait( ) Section 7.4. Long-Running Event Callbacks Section 7.5. Summary Chapter 8. Threads and Collection Classes Section 8.1. Overview of Collection Classes Section 8.2. Synchronization and Collection Classes Section 8.3. The Producer/Consumer Pattern Section 8.4. Using the Collection Classes Section 8.5. Summary Chapter 9. Thread Scheduling Section 9.1. An Overview of Thread Scheduling Section 9.2. Scheduling with Thread Priorities Section 9.3. Popular Threading Implementations Section 9.4. Summary Chapter 10. Thread Pools Section 10.1. Why Thread Pools? Section 10.2. Executors Section 10.3. Using a Thread Pool Section 10.4. Queues and Sizes Section 10.5. Thread Creation Section 10.6. Callable Tasks and Future Results Section 10.7. Single-Threaded Access Section 10.8. Summary Chapter 11. Task Scheduling Section 11.1. Overview of Task Scheduling Section 11.2. The java.util.Timer Class Section 11.3. The javax.swing.Timer Class Section 11.4. The ScheduledThreadPoolExecutor Class Section 11.5. Summary Chapter 12. Threads and I/O Section 12.1. A Traditional I/O Server Section 12.2. A New I/O Server Section 12.3. Interrupted I/O Section 12.4. Summary Chapter 13. Miscellaneous Thread Topics Section 13.1. Thread Groups Section 13.2. Threads and Java Security Section 13.3. Daemon Threads Section 13.4. Threads and Class Loading Section 13.5. Threads and Exception Handling Section 13.6. Threads, Stacks, and Memory Usage Section 13.7. Summary Chapter 14. Thread Performance Section 14.1. Overview of Performance Section 14.2. Synchronized Collections Section 14.3. Atomic Variables and Contended Synchronization Section 14.4. Thread Creation and Thread Pools Section 14.5. Summary Chapter 15. Parallelizing Loops for Multiprocessor Machines Section 15.1. Parallelizing a Single-Threaded Program Section 15.2. Multiprocessor Scaling Section 15.3. Summary Appendix A. Superseded Threading Utilities Section A.1. The BusyFlag Class Section A.2. The CondVar Class Section A.3. The Barrier Class Section A.4. The RWLock Class Section A.5. The ThreadPool Class Section A.6. The JobScheduler Class Section A.7. Summary
Почитал "Основы многопоточного, распределенного и параллельного программирования". Насторожил то факт, что автор введенным формальным языком доказывает семантическую работоспособность программ. Это во-первых. Во второых, как мне показалось, язык введен не совсем корректно: достаточно вспомнить определение оператора "if", где используется символ => (логического следования), хотя нигде значение этого символа не оговаривается и что хотел сказать автор не очень ясно. Если кто-нибудь разобрался с логическими построениями автора, разубедите меня. Потому что формальное доказательство работоспособности программы - грааль всех информатиков-теоретиков.
ОтветитьУдалить