线程是应用程序执行的基本单元。多线程就是允许将一个程序分成几个并行的子任务,各子任务相互独立并发执行。Java提供了对多线程机制的支持,包括线程同步和线程通信等。线程能有效地提高程序运行性能和执行效率。
多线程程序设计是比较困难的,因此本章将主要讲述多线程的基本概念和使用方法。
本章主要内容
& 多线程的概念
& Java线程建立
& 操作系统中的进程和线程
& 线程的同步与通信
多线程是Java语言的特色之一。利用Java相关的API,可以很容易地编写出一个多线程的程序。多线程能够有效地提高程序的处理效率。本章从多线程的概念和多线程的优点开始讲述。
Java程序通过流控制来执行程序流,程序中单个顺序的流控制称为线程,多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度;区别在于线程没有独立的存储空间,而是和所属进程中的其他线程共享一个存储空间,这使得线程间的通信远比进程简单。
多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此也不用关心它,只需要设想各个线程是同时执行即可。
多线程和传统的单线程在程序设计上最大的区别在于:由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的。由此带来的线程调度以及同步等问题,将在本章中加以探讨。
在Java语言产生前,传统程序设计语言的程序同一时刻只能单任务操作,效率非常低,例如程序往往在接收数据输入时发生阻塞,只有等到程序获得数据后才能继续运行。随着Internet的迅猛发展,这种状况让人们越来越不能忍受:如果网络接收数据阻塞,后台程序就处于等待状态而不继续任何操作,而且这种阻塞是经常会碰到的,此时CPU资源被白白地闲置起来。如果在后台程序中能够同时处理多个任务,则能充分地利用CPU资源。多线程是Java语言的一个很重要的特点。在一个Java程序中可以同时并行运行多个相对独立的线程,例如,创建一个线程来进行数据输入输出,再创建另一个线程在后台进行其他的数据处理,即使输入输出线程在接收数据时阻塞,处理数据的线程仍然在运行。多线程程序设计大大提高了程序执行效率和处理能力。