您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java并发编程实践-电子书-01章
第一章Java并发编程实践基础第一章Java并发编程实践基础..............................................................11.1进程与线程...................................................................................................................21.1.1进程...................................................................................................................21.1.2线程...................................................................................................................61.2创建多线程...................................................................................................................71.2.1继承Thread创建线程.....................................................................................81.2.2实现Runnable接口创建线程..........................................................................81.2.3线程池...............................................................................................................91.3线程的基本控制.........................................................................................................121.3.1使用Sleep暂停执行......................................................................................131.3.2使用join等待另外一个线程结束.................................................................131.3.3使用中断(Interrupt)取消线程........................................................................151.3.4使用Stop终止线程........................................................................................181.3.5结束程序的执行.............................................................................................191.4并发编程实践简述.....................................................................................................19参考文献:.............................................................................................................................201.1进程与线程进程和线程是两个既有关系,又有重大区别的计算机概念,本届首先回顾一下进程和线程的基本概念,然后讲解一下他们的区别,最后是Java线程概念模型。1.1.1进程讲解进程的概念时,首先会提到与之相关的另一个概念:程序。首先介绍程序的概念,然后引入进程。1.1.1.1程序与资源共享1.程序的封闭性与可再现性在程序设计中,程序员习惯于用顺序方式编制程序。例如,一个比较典型的顺序程序是:先从某一外部设备(例如磁盘)上输入数据,随之一步一步进行计算,最后将计算结果输出。计算机中的这种程序活动有如下几个特点:(1)一个程序在机器中运行时独占全机资源,因此除了初始状态外,只有程序本身规定的动作才能改变这些资源的状态。(2)机器严格地顺序执行程序规定的动作。每个动作都必须在前一动作结束后才能开始,除了人为干预造成机器暂时停顿外,前一动作的结束就意味着后一动作的开始。程序和机器执行程序的严格一一对应。(3)程序的执行结果与它的运行速度无关。也就是说,处理机在执行程序两个动作之间的停顿不会影响程序的执行结果。上述特点概况起来就是程序的封闭性和可再现性。所谓封闭性指的是程序一旦开始运行,其计算结果就只取决于程序本身,除了人为地改变机器的运行状态或机器故障以外,没有其它因素能够对程序的运行过程施加影响。所谓再现性就是当机器在同一数据集上重复执行同一程序时,机器内部的动作系列完全相同,最后获得的结果也相同。这种工作方式的特点是简单、清晰、便于调试程序。2.资源共享与并行为了提高计算机系统内各种资源的使用效率,现代计算机系统设计中普遍采用了多道程序技术。与单道程序相比,多道程序的工作环境发生了很大变化,主要表现在下列两个方面:(1)资源共享资源共享指的是系统中的软、硬件资源不再为单个用户程序独占,而由几道用户程序共同使用。于是,这些资源的状态就不再取决于一道程序,而是由多道程序的活动所决定。这就从根本上打破了了一道程序封闭于一个系统中运行的局面。(2)程序的并发运行系统中各个部分不再以单纯的串行方式工作。换言之,在任一时刻系统中不再只有一个活动,而是存在着许多并行的活动。从硬件方面看,处理机、各种外设、存储部件常常并行地进行着工作。从程序方面看,则可能有若干个作业程序或者同时、或者互相穿插在系统中并行运行。这时,机器不再是简单地顺序执行一道程序。也就是说,一道程序的前一动作结束后,系统不一定立即执行其后续操作,而可能转而执行其它程序的某一操作。对于程序中可以执行的操作也可能不需要等待另一操作结束,系统就开始执行它们。这样也就打破了程序执行的顺序性。同时,多个程序活动可能是在不同的数据集上执行同一个程序,所以程序以及机器执行程序的活动不再有严格的一一对应关系。1.1.1.2进程与并发1.进程的引入在多道程序工作环境下,一个程序活动不再能独占系统资源,因此也就不再能单独决定这些资源的状态;程序和机器执行程序的活动之间也不再有一一对应关系。总之,程序活动不再处于一个封闭的系统中,而是和其它程序活动之间存在着相互依赖和制约的关系,因而呈现出并发、动态以及相互制约这些新的特征。在这种情况下,程序这个静态的概念已经不能如实地反映程序活动的这些特征。为此,六十年代中期MULTICS操作系统的设计者和E.W.Dijkstra为首的T.H.E操作系统的设计者开始广泛应用进程(process)这一新的概念来描述系统和用户的程序活动。“进程”是操作系统的最基本的,也是最重要的概念之一。这个概念对于操作系统的理解、描述和设计都具有极其重要的意义。但是迄今为止对这一概念还没有一个确切统一的描述。有人称进程是可以并行运动的计算部分(S.E.Madnick,J.J.Donovan);有人称进程是一个程序与其数据一道在计算机上顺序执行时所产生的活动(A.C.Shaw);有人从调度组织角度出发,称进程是一个独立的可以调度的活动(Ellis.Cohen,DavidJofferson);有人则从资源共享和竞争方面观察,认为进程是一个抽象的实体,当它执行一个任务时将要求分配和释放各种资源(Peterdenning)。这些描述都注意到了进程的动态性质,但侧重面不同。为了突出进程和程序两个概念的区别和联系,我们对进程作如下描述:进程是一种活动,它是由一个动作系列组成,每个动作是在某个数据集上执行一段程序,整个活动的结果是提供一种系统或用户功能。2.进程与程序的区别我们再为进程和程序之间的区别和联系作以下几点说明。1)进程是程序的一次运行活动,属于一种动态的概念。程序是一组有序的静态指令,是一种静态的概念。但是,进程离开了程序也就没有了存在的意义。因此,我们可以这样说:进程是执行程序的动态过程,而程序是进程运行的静态文本。如果我们把一部动画片的电影拷贝比拟成一个程序,那么这部动画片的一次放映过程就可比为一个进程。2)一个进程可以执行一个或多个程序。例如:一个进程进行C源程序编译时,它要执行前处理、词法语法分析、代码生成和优化等几个程序。反之,同一程序也可能由多个进程同时执行,例如:上述C编译程序可能同时被几个程序执行,它们对相同或不同的源程序分别进行编译,各自产生目标程序。我们再次以动画片及其放映活动为例,一次电影放映活动可以连续放映几部动画片,这相当于一个进程可以执行几个程序。反之,一部动画片可以同时在若干家电影院中放映,这相当于多个进程可以执行几个同一程序。不过要注意的是,几家电影院放映同一部电影,如果使用的是同一份拷贝,那么实际上是交叉进行的。但在多处理机情况下,几个进程却完全可以同时使用一个程序副本。3)程序可以作为一种软件资源长期保持着,而进程则是一次执行过程,它是暂时的,是动态地产生和终止的。这相当于电影拷贝可以长期保存,而一次放映活动却只延续1~2小时。进程需要使用一种机构才能执行程序,这种机构称之为处理机(Processor)。处理机执行指令,根据指令的性质,处理机可以单独用硬件或软、硬件结合起来构成。如果指令是机器指令,那么处理机就是我们一般所说的中央处理机(CPU)。3.进程的并发性和不确定性并发性:并发可以看成是在系统中同时有几个进程在活动着,也就是同时存在几个程序的执行过程。如果进程数与处理机数相同,则每个进程都占用一个处理机。但更一般的情况是是处理机数少于进程数,于是处理机就应被共享,在进程间进行切换使用。如果相邻两次切换的时间间隔非常短,而观察时间又相当长,那么各个进程都在前进,造成一种宏观上并行运行的效果。所以并发处理的真正含义是:如果我们把系统作为一个整体来观察,则在任一时刻有若干进程存在于系统的这一部分或那一部分,这些进程都处在其起点和终点之间。我们把所有这些进程都看成是正在系统中运行着、活跃着。不确定性:我们把进程看成是一个动作系列,而每个动作是执行一段程序。处理机要检测是否已接获某种需要立即处理的中断信号。如果已经接到这种信号,则立即停止正在执行的程序段,转而执行相应的中断处理程序。在此以后,还要按情况或者恢复继续执行被中断的程序,或者调度执行另一个进程的程序。因为中断发生的时间以及频繁程度与系统中许多经常变化着的不确定因素有关,例如,系统中活跃着的进程的数量以及它们的工作情况,各种硬件工作速度的细微变化等,所有它们都是不可预测的。因此,各个进程(也就是各个动作序列)也就在不可预测的次序中前进。如果由于进程间相互制约关系造成了某一进程或某些进程异常情况,那么由于这种制约关系是与一定的活动序列紧密相关的,而这种动作序列又不易复现。于是它所造成的进程的异常运行情况也就不易复现。可见,操作系统外部表现出来的不确定性就是内部动作序列不可预测、不易复现的反应。4.进程的结构在UNIX或者Linux中,进程是通过FORK系统调用被创建的。在调用了FORK之后,父进程可以和
本文标题:Java并发编程实践-电子书-01章
链接地址:https://www.777doc.com/doc-5036537 .html