1.4 线程的操作

上传人:ni****g 文档编号:511271206 上传时间:2023-11-13 格式:DOC 页数:29 大小:394.50KB
返回 下载 相关 举报
1.4 线程的操作_第1页
第1页 / 共29页
1.4 线程的操作_第2页
第2页 / 共29页
1.4 线程的操作_第3页
第3页 / 共29页
1.4 线程的操作_第4页
第4页 / 共29页
1.4 线程的操作_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《1.4 线程的操作》由会员分享,可在线阅读,更多相关《1.4 线程的操作(29页珍藏版)》请在金锄头文库上搜索。

1、Android初级培训教材 1.4 线程的操作 (3课时 机上3课时)目录第一课时2教学目标21.4.1.1进程的定义21.4.1.2线程的定义21.4.1.3进程与线程之间的关系2第二课时9教学目标91.4.2.1 Java中如何实现多线程91.4.2.1.1 如何启动线程91.4.2.1.2 使用Runnable接口111.4.2.1.3 两个线程131.4.2.1.4 深入学习Thread类141.4.2.1.5 多个线程的故事18第三课时22教学目标221.4.3.1 复印社模型221.4.3.1.1 Copier类221.4.3.1.2 Employee类241.4.3.2 一个简单

2、的复印社例程251.4.3.2.1 一个员工一台复印机251.4.3.2.2 当多个员工共享一台复印机261.4.3.3 多个线程的同步271.4.3.3.1 线程同步之synchronized关键字271.4.3.3.2 使用新例程演示新的copyPages()方法28第一课时教学目标进程和线程之间的区别和联系。1.4.1.1 进程的定义当一个程序运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。1.4.1.2 线程的定义线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可

3、以执行同样的函数。1.4.1.3 进程与线程之间的关系一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。资源分配给进程,同一进程的所有线程共享该进程的所有资源。处理机分给线程,即真正在处理机上运行的是线程。线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信实现同步。下面我以一个日常生活中简单的例子来说明进程和线程之间的区别和联系:图1.4-1 交通图图1.4-1是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。这些线程(车道)共享了进程(道路)的公共资源(土地资源)。这些线程(车道

4、)必须依赖于进程(道路),也就是说,线程不能脱离于进程而存在(就像离开了道路,车道也就没有意义了)。这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到CPU时间片(交通灯变化)的那一刻才能知道。(1)深入了解java线程线程-执行代码的机器、执行代码的基本单位。线程是编程中极其重要的一部分内容,

5、但是对于初学线程的读者来说,它的概念显得过于抽象而不好理解。和程序的代码不同,线程是隐藏在程序背后的,对于编程者来说它是看不见摸不着的。为了形象地描绘线程的作用,本节将使用一个“CD机模型”和“演奏会模型”来与线程进行类比。为了明白线程,首先需要了解Java程序是如何运行的。线程它不是Java语言语法的一部分。在Java中,线程可以说是一个“机器”,它的作用就是执行Java代码。换句话说,Java中的代码,都是通过线程为基本单位来执行的。图1.4-2描绘了前面学习的从Java源代码到生成Java类文件的过程。编写java源文件生成class文件编译java源文件没有语法错误有语法错误图1.4-

6、2 生成java类文件的过程相信这个过程大家并不陌生,本章后面的内容对上面这个过程将不再叙述。生成了Java类文件之后,就是运行Java程序了。上段中说过,线程是Java中程序执行的基本单位,执行一个Java程序(有main()方法的Java类)的过程如图1.4-3所示。启动java平台读取并加载class文件创建一个线程让线程从main()方法开始执行程序Main()方法结束,线程也随之结束java平台退出启动java平台图1.4-3 java程序执行过程在上图中,启动Java平台就是我们在命令行执行java命令,Java平台退出就是java命令执行结束。中间的图表示了Java平台执行的过程

7、。因为是在控制台上直接使用java命令执行一个类文件的,所以很容易觉得java命令是执行Java代码的基本单位。实际上,java命令是通过创建一个Java线程来执行Java代码的。说明:Java线程当然也是Java平台的一部分。在本章中为了突出Java线程,从概念上将它从Java平台中剥离了出来单独讲解。(2)Java线程和CD机从线程的角度来看,Java平台更像是一个线程管理器。下面我们通过一个例子,来说明类文件、Java线程和Java平台的关系。大家都用过CD机,CD机中读取CD碟片内容的部件就是CD机上的激光头。CD和Java之间各个元素可以做如下类比,如图1.4-4所示。Class文件

8、CD碟片Java线程CD机中的激光头Java平台CD机图1.4-4 java和CD机的对比class文件就如同CD碟片:class文件中包含Java程序的可执行代码;CD中包含着音乐文件。它们都是数据的载体。Java线程就如同CD中的激光头:Java线程负责执行class文件中的代码;激光头负责读取并处理CD上的音乐文件。它们都是负责处理数据的。Java平台就如同CD机:Java平台包含Java线程,然后,Java线程还负责管理Java线程,包括创建Java线程,为Java线程提供各种资源(在这里不去深究是什么资源,可以将之理解为Java线程执行代码的各种基础条件);CD机包括激光头,同时它也

9、管理着激光头,为激光头供电,同时还提供外壳、马达、播放控制、音频解码和音频输出等各种功能,没有这些功能,激光头本身无法处理数据。Java平台和CD机可以说是独立的系统,可以完成一个功能;线程和激光头是它们中的核心部件,但是并不是可独立完成整个工作的部件。(3)从CD机的工作机制看Java线程通过上面这个例子,相信线程这个概念已经不完全陌生了。对于激光头,它会从CD的某个位置开始,按照顺序读取CD上的数据。那么线程的工作模式是怎样的呢?其实和激光头很类似-只要给线程一个“开头”,线程就会一直沿着这个“开头”执行下去。对于前面的所有例程来说,这个“开头”在图1.4-3中已经说明了,它就是我们再熟悉

10、不过的main()方法。也就是说,线程会从main()方法开始执行程序。CD机的作用就是播放音乐,当CD在播放完CD后,激光头就会关闭,CD机也会自动关机。同样的道理,Java平台的作用就是执行Java程序代码。线程在执行完main()方法后,也就结束了。而当Java平台发现自己里面的线程都退出以后,也就会退出。这时Java程序就运行完毕了。那么,线程是如何执行代码的呢?这个超出了本书的范围。就好像使用CD机一样,使用者只要知道CD机中激光头是用来读取和处理CD碟片上的内容就可以了,没必要去追究它是如何读取CD碟片上的内容的。对于线程也是一样的道理。前面说过,线程是操作系统中的一个概念,所以“

11、线程是如何执行程序的”这个问题属于操作系统课程中的内容。对于学习Java而言,在这里先知道如下几点就可以了。线程是执行Java程序代码的基本单位。Java线程也是Java平台的一部分。Java线程是运行在Java平台内部的,Java平台负责管理Java线程。Java线程执行程序代码时,Java平台为其提供各种所需的条件。当线程执行完给它的方法后,就会退出。Java平台中如果没有正在运行的线程,就代表程序执行完毕,Java平台也就自动退出了。(4)演奏会模型线程是隐藏在Java平台之中的,它的工作方式并没有展露在Java语法中。我们只能够通过类比的方式来理解Java线程以及程序代码、Java线程

12、和Java平台三者之间的关系。本节将要介绍的就是“演奏会模型”。演奏会并不是一个陌生的概念,可以把它看成是由一个指挥家、一个或多个演奏家、 乐谱组成的事物。它的最终结果就是演奏乐谱。我们的这个演奏会模型与现实中的演奏会差不多,区别有以下几点。演奏会中使用的乐谱不是纸质的乐谱,而是用一个显示器显示乐谱。所有的乐谱都保存在一个存储设备上。所以在演奏会开始之前要先将乐谱输入到存储设备中。每个演奏家使用一个单独的显示器来看乐谱,但是所有的显示器都从同一个存储设备上读取乐谱。显示器每次只显示一小节乐谱内容,演奏家演奏完这个小节后,显示器会自动显示出乐谱下一小节的内容,直到乐谱结束。演奏会的工作模式也不同

13、。首先将所有的乐谱输入到存储设备中。指挥家按照演奏的进度,每当需要演奏一个乐谱的时候,这个指挥家首先请上一位演奏家,然后搬上一个显示器来显示需要演奏的乐谱。演奏家按照显示器上的内容进行演奏。当演奏家演奏完当前小节后,显示器自动显示乐谱下一小节的内容。当乐谱结束后,演奏家就退场了。当所有的演奏家都退场以后,指挥家就退场,演奏会就结束了。下面用图1.4-5将Java程序和这个演奏会模型做一个类比。Java源文件乐谱源文件Java的类文件乐谱输入存储设备后的数据Java平台指挥家图1.4-5 java线程和演奏会模型的类比当前执行的程序当前显示的小节线程演奏家通过图1.4-5可以更清晰地看出线程、J

14、ava平台和程序代码之间的关系。一个演奏家专心演奏摆在面前的乐谱,就好像Java线程一行行的执行代码。Java平台则是指挥家,管理着整个程序,包括Java线程。Java平台为了让Java线程能够执行代码,做了很多的工作。下面的图1.4-6将一个程序的执行过程和一个演奏会的执行过程做了一个类比。将java源文件编译为class文件将乐谱输入存储设备启动java平台指挥家就绪Java平台创建一个线程指挥家请出一位演奏家图1.4-6 java程序执行流程和演奏会流程Java平台让这个线程从main()方法开始执行程序代码指挥家让演奏家按照显示器上的乐谱进行演奏Java平台加载类文件,并找到其中的ma

15、in()方法指挥家搬出一台显示器并让显示器显示需要演奏的乐谱Java线程执行完上一行代码后,自动执行下一行代码main()方法结束,线程退出程序执行完毕,java平台退出演奏家演奏完一小节后,显示器显示下一小节,演奏家继续演奏乐谱演奏结束,演奏家退场演奏会演奏结束,指挥家退场下面以一个简单的例程来说明图1.4-6中所示的流程。package com.javaeasy.execution; / 例程所在的包 public class Execution / 例程名 public static void main(String args) /这就是程序执行的起点 /也是线程执行的起点 int i = 3 + 5;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号