11.1 线程的概念
线程是Java中重要的组成部分之一。一般来说,“程序”(Program)是保存在存储设备上的文件;“进程”(Process)是正在计算机中执行的程序;“线程”(Thread)是进程中某个单一顺序的控制流或者一条执行路径。在主流操作系统中,如Mac、Linux、Windows XP等,线程有时被称为轻量级进程(LightWeight Process,LWP),是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行3种基本状态。在单个进程中同时运行多个线程完成不同的工作,称为多线程。
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效地提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。
当前的通用操作系统大多采用多线程的概念,把线程视为基本执行单位,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。对于多线程程序来说,一个进程中的多个相似工作线程共享资源,分别执行指令,例如,家用的自来水系统,所有的自来水龙头都连接居民小区的自来水系统,该系统就是一个共享的自来水资源,一个水龙头某个时刻只能满足一个用户需求,3个水龙头可以同时满足3个用户的需求,而它们都是共享居民小区的自来水资源,如图11-1所示。
在这里打开水龙头的用户就相当于计算机中正在执行的任务。通过这个例子,我们可以发现三点:
·线程是属于进程的,一个进程往往存在多个相似的线程;
·多线程可以改善任务等待执行的时间;
·当多个线程同时使用同一资源的时候,将会产生冲突。
图11-1 多线程示意图
又例如,在对1~1 000数值进行累加时,传统的方法将这1 000个数依次累计,如图11-2(a)所示,如果采用多线程,将累加过程分为10个线程分别计算,各线程累计100个数,最后再加各线程累计结果相加,如图11-2(b)所示。
图11-2 多线程与传统单线程示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。