http://www.iteye.com/magazines/131 java
计算机的使用者一直觉得他们的计算机能够同时作不少事情。他们认为当其余的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们能够继续在文字处理程序上工做。甚至对于单个应用程序,他们任然期待它能在在同一时间作不少事情。举个例子,一个流媒体播放程序必须能同时完成如下工做:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示。甚至文字处理器也应该能在忙于从新格式化文本和刷新显示的状况下同时响应键盘和鼠标事件。这样的软件就被称为并发软件。 程序员
经过Java语言和Java类库对于基础并发的支持,Java平台具备彻底(from the ground up )支持并发编程的能力。从JDK5.0起,Java平台还引入了高级并发APIs。这个课程不只涵盖了Java平台基础并发内容,还对高级并发APIs有必定的阐述。 编程
进程和线程
在并发编程中,有两个基本的执行单元:进程和线程。在java语言中,并发编程最关心的是线程,然而,进程也是很是重要的。
即便在只有单一的执行核心的计算机系统中,也有许多活动的进程和线程。所以,在任何给定的时刻,只有一个线程在实际执行。处理器的处理时间是经过操做系统的时间片在进程和线程中共享的。
如今具备多处理器或有多个执行内核的多处理器的计算机系统愈来愈广泛,这大大加强了系统并发执行的进程和线程的吞吐量–但在不没有多个处理器或执行内核的简单的系统中,并发任然是可能的。
进程
进程具备一个独立的执行环境。一般状况下,进程拥有一个完整的、私有的基本运行资源集合。特别地,每一个进程都有本身的内存空间。
进程每每被看做是程序或应用的代名词,然而,用户看到的一个单独的应用程序实际上多是一组相互协做的进程集合。为了便于进程之间的通讯,大多数操做系统都支持进程间通讯(IPC),如pipes 和sockets。IPC不只支持同一系统上的通讯,也支持不一样的系统。
Java虚拟机的大多数实现是单进程的。Java应用可使用的ProcessBuilder对象建立额外的进程,多进程应用超出了本课的范围。
线程
线程有时也被称为轻量级的进程。进程和线程都提供了一个执行环境,但建立一个新的线程比建立一个新的进程须要的资源要少。
线程是在进程中存在的 — 每一个进程最少有一个线程。线程共享进程的资源,包括内存和打开的文件。这样提升了效率,但潜在的问题就是线程间的通讯。
多线程的执行是Java平台的一个基本特征。每一个应用都至少有一个线程 – 或几个,若是算上“系统”线程的话,好比内存管理和信号处理等。可是从程序员的角度来看,启动的只有一个线程,叫主线程。这个线程有能力建立额外的线程,咱们将在下一节演示。
网络