




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第19章齐头并进完成任务多线程,进程与线程 认识线程 线程的状态 线程操作的一些方法 多线程的同步 线程间通讯 线程生命周期的控制,19.1 进程与线程,进程的特征: 1. 一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间,一组系统资源.在进程概念中,每一个进程的内部数据和状态都是完全独立的 2. 创建并执行一个进程的系统开销是比较大的 3. 进程是程序的一次执行过程,是系统运行程序的基本单位,19.1 进程与线程,线程的特征: 1. 在java中,程序通过流控制来执行程序流。程序中单个顺序的流控制称为线程。 2. 多线程则指的是在单个进程中可以同时运行多个不同的线程,执行
2、不同的任务。多线程意味着一个程序的多行语句可以看上去几乎在同一时间内同时运行 不同的是同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈,19.2 认识线程,19.2.1 通过继承Thread类实现多线程 19.2.2 通过实现Runnable接口实现多线程 19.2.3 两种多线程实现机制的比较,19.2 认识线程,线程(Thread)是指程序的运行流程,“多线程”的机制则是指可以同时运行多个程序块,使程序运行的效率变得更高,也可克服传统程序语言所无法解决的问题 【范例19-1】 线程使用范例,19.2.1 通过继承T
3、hread类实现多线程 Thread存放在java.lang类库里,但并不需加载java.lang类库,因为它会自动加载 【范例19-2】 同时激活多个线程使用范例,19.2.2 通过实现Runnable接口实现多线程 用Runnable接口来创建线程了。多线程的定义语法如下 class 类名称 implements Runnable/ 实现Runnable接口 属性 方法 修饰符 run()/ 覆写Thread类里的run()方法 以线程处理的程序; ,19.2.2 通过实现Runnable接口实现多线程 【范例19-3】 Runnable接口实现多线程使用实例,19.2.3 两种多线程实现
4、机制的比较 Thread类实现了Runnable接口,也就是说Thread类也是Runnable接口的一个子类 【范例19-4】 Thread类的继承使用实例 【范例19-5】 Thread类的继承使用实例2 【范例19-6】 Runnable接口实现多线程使用实例2,19.3 线程的状态,任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止 1. NEW 2. RUNNABLE 3. BLOCKED 4. WAITING 5. TIMED_WAITING 6. TERMINATED,19.4 线程操作的一些方法,19.4.1 取得和设置线程的名称 19.4.2 判断线程是否启动 19.4
5、.3 后台线程与setDaemon()方法 19.4.4 线程的强制运行 19.4.5 线程的休眠 19.4.6 线程的中断,19.4 线程操作的一些方法,操作线程的主要方法在Thread类中,下表列出了Thread类中的主要方法,19.4 线程操作的一些方法,19.4 线程操作的一些方法,19.4.1 取得和设置线程的名称 在Thread类中,可以通过getName()方法取得线程的名称,通过setName()方法设置线程的名称 【范例19-7】 线程名称的分配 【范例19-8】 在线程中设置线程的名称,19.4.2 判断线程是否启动 通过isAlive()方法来测试线程是否已经启动而且仍然
6、在启动 【范例19-9】 判断线程是否启动,19.4.3 后台线程与setDaemon()方法 如果某个线程对象在启动(调用start()方法)之前调用了setDaemon(true)方法,这个线程就变成了后台线程 【范例19-10】 setDaemon()方法的使用范例,19.4.4 线程的强制运行 【范例19-11】 线程的强制运行范例,19.4.5 线程的休眠 【范例19-12】 线程的休眠使用范例,19.4.6 线程的休眠 【范例19-13】 线程的中断使用范例 【范例19-14】 线程的中断使用范例2,19.5 多线程的同步,19.5.1 同步问题的引出 19.5.2 同步代码块 1
7、9.5.3 同步方法 19.5.4 死锁,19.5.1 同步问题的引出 在卖票程序中可能碰到一种意外,同一张票号被打印两次或多次,也可能打印票号为0或是负数。这个意外出现的原因在下面这部分代码中 if(tickets0) System.out.println(Thread.currentThread().getName()+出售票+tickets-); 【范例19-15】 线程的同步问题,19.5.2 同步代码块 要解决上面的问题,必须保证下面这段代码的原子性 if(tickets0) System.out.println(Thread.currentThread().getName()+出售
8、票+tickets-); ,19.5.3 同步方法 同步方法定义语法如下 访问控制符 synchronized 返回值类型 方法名称(参数) . ; ,19.5.4 死锁 一旦有多个进程,且它们都要争用对多个锁的独占访问,那么就有可能发生死锁。如果有一组进程或线程,其中每个都在等待一个只有其它进程或线程才可以执行的操作,那么就称它们被死锁了 【范例19-16】 程序死锁的产生,19.6 线程间通讯,19.6.1 问题的引出 19.6.2 问题如何解决,19.6.1 问题的引出 把一个数据存储空间划分为两部分:一部分用于存储姓名,一部分用于存储性别。应用含两个线程:一个添加数据(生产者);一个取
9、出数据(消费者)。程序有两种意外需要考虑: 1. 假设生产者线程刚向数据存储空间中添加了一个人的姓名,还没有加入这个人的性别,CPU就切换到了消费者线程,消费者线程将把这个人的姓名和上一个人的性别联系到了一起,19.6.1 问题的引出 2. 生产者放了若干次数据,消费者才开始取数据,或者是,消费者取完一个数据后,还没等到生产者放入新的数据,又重复取出已取过的数据,19.6.2 问题如何解决 编写两个包含有run方法的类来完成这两个线程,一个是生产者类Producer,一个是消费者类Consumer class Producer implements Runnable public void run() while(true) / 编写往数据存储空间中放入数据的代码 ,19.6.2 问题如何解决 【范例19-17】 线程之间的通讯 【范例19-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养犬管理办法重庆
- 兼职费用管理办法
- 内控建设管理办法
- 内部存款管理办法
- 内部集资管理办法
- 军官安置管理办法
- 军队婚姻管理办法
- 农商头寸管理办法
- 农机产品管理办法
- 农村支教管理办法
- 2022年9月6日贵州毕节市金沙县事业单位考试《公共基础知识》试题
- JJF 1050-1996工作用热传导真空计校准规范
- GB/T 20840.8-2007互感器第8部分:电子式电流互感器
- GB/T 2007.1-1987散装矿产品取样、制样通则手工取样方法
- 《歌唱祖国》-课件
- 体表肿物切除术课件
- 人行步道施工方案
- 天津临港海洋重工建造基地码头工程(PPT)
- 双方责任及关键工程分工界面
- 图像西方与想象西方——《良友》西方形象的重构与呈现
- 中国卒中患者营养管理的专家共识PPT课件
评论
0/150
提交评论