Tutorial

Java Concurrency涵盖了Java平台上的多线程、并发性和并行性。这包括Java并发工具、问题以及解决方案。本教程介绍了多线程的核心概念、并发设计、并发问题,以及Java多线程的代价和好处。

Brief History of Concurrency

过去,计算机只有一个CPU,并且在一个时间点只能执行一个程序。后来出现了多任务处理,意味着计算机可以在同一时间执行多个程序(又叫任务或进程)。尽管不是真正的在同一时间。唯一的CPU在多个程序见共享。操作系统在正在执行的程序间来回切换,切换之前执行每个程序一小会时间。

多任务处理给开发人员带来了挑战。程序再也不能假设其拥有全部的CPU运行时间,也没有全部的内存或其他计算机资源。一个“好公民”程序应该释放所有的其不再使用的资源,以便其他程序使用。

再后来出现了多线程,意味着同一个程序内部可以有多个执行线程。一个执行线程可以看成一个执行程序的CPU。当你有多个线程来执行程序时,看起来就像有多个CPU在执行同一个程序。

多线程可以显著的提升某些类型的程序的性能。但是,多线程比多任务处理的挑战更大。这些线程在同一个程序内部执行,因此会同时读写同一份内存。这可能会导致出现单线程程序不会发生的错误。其中一些错误可能在单CPU机器上不会出现,因为两个线程绝不会真正的同时执行。然而,现代电脑具有多核CPU,甚至还有多CPU。这意味着不同的线程可以由不同的核或CPU同时执行。

image

如果一个线程在另一个线程正在写内存的时候,去读取同一个地址的内存,这个线程最终会读取到什么样的值?旧的值?另一个线程写的值?或者是这两个值的混合?或者,两个线程同时往同样地址的内存进行写操作,当两个线程执行结束后,会留下什么值?第一个线程写的值?第二个线程写的值?还是两个值的混合?

没有适当的预防措施的话,什么都有可能发生。我们甚至无法预测。结果可能会不时的发生变化。因此,知道如何采取正确的预防措施,对于开放人员来说是非常重要的 - 意味着学习控制线程如何访问共享资源,比如内存、文件、数据库等。这是本教程要讨论的主题之一。

Multithreading and Concurrency in Java

Java是最早让开发人员能轻松使用多线程的语言之一。Java在很早就具有多线程功能。因此,Java开发人员经常面临上面讨论的问题。这就是我写本系列教程的原因。正如我自己以及任何可能从中受益的Java开发人员所注意到的那样。

本教程主要关于Java中的多线程,但是多线程中出现的一些问题同多任务处理和分布式系统系统出现的问题类似。因此本教程也会介绍多任务处理和分布式系统的介绍。因此叫Concurrency而不是Multithreading

Java Concurrency in 2015 and Forward

自从第一本Java并发书籍问世以来,甚至从Java5并发工具包发布以来,并发结构和设计领域发生了很多事情。

新的,异步的“无共享”平台和API,比如Vert.x、Play / Akka以及Qbit出现了。这些平台使用了不同于标准Java / JEE的并发、线程、内存共享和锁模型。新的非阻塞并发算法发布了,新的非阻塞工具(如LMax Disrupter)也加到了我们的工具库。新的函数式并发编程也在Java7的Fork-Join框架以及Java8的流式集合API中被引入。

随着这些新的发展,现在是时候更新这个Java Concurrency教程了。因此,本教程再次进入制作过程。只要有时间,就会进行更新。

Java Concurrency Study Guide

如果你是Java Concurrency方面的新手,我建议你按照下面的计划进行学习。

通用并发和多线程理论:

  • Multithreading Benefits
  • Multithreading Costs
  • Concurrency Models
  • Same-threading
  • Concurrency vs. Parallelism

Java并发基础:

  • Creating and Starting Java Threads
  • Race Conditions and Critical Sections
  • Thread Safety and Shared Resources
  • Thread Safety and Immutability
  • Java Memory Model
  • Java Synchronized Blocks
  • Java Volatile Keyword
  • Java ThreadLocal
  • Java Thread Signaling

Java并发中的典型问题:

  • Deadlock
  • Deadlock Prevention
  • Starvation and Fairness
  • Nested Monitor Lockout
  • Slipped Conditions

解决上述问题的Java并发构件:

  • Locks in Java
  • Read / Write Locks in Java
  • Reentrance Lockout
  • Semaphores
  • Blocking Queues
  • Thread Pools
  • Compare and Swap

进一步的主题:

  • Anatomy of a Synchronizer
  • Non-blocking Algorithms
  • Amdahl's Law
  • References

有必要说明下,这个Java Concurrency系列来源于jenkov.com,本文只是翻译,希望大家千万不要误会,本文不是原创。原文地址:Java Concurrency。

你可能感兴趣的:(Tutorial)