收藏 分享(赏)

第19章+齐头并进完成任务──多线程.ppt

上传人:jmydc 文档编号:6291215 上传时间:2019-04-04 格式:PPT 页数:31 大小:156KB
下载 相关 举报
第19章+齐头并进完成任务──多线程.ppt_第1页
第1页 / 共31页
第19章+齐头并进完成任务──多线程.ppt_第2页
第2页 / 共31页
第19章+齐头并进完成任务──多线程.ppt_第3页
第3页 / 共31页
第19章+齐头并进完成任务──多线程.ppt_第4页
第4页 / 共31页
第19章+齐头并进完成任务──多线程.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

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 通过继承Thread类实现多

3、线程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 两种多线程实现机制的比较Thread类实现了Ru

4、nnable接口,也就是说Thread类也是Runnable接口的一个子类【范例19-4】 Thread类的继承使用实例【范例19-5】 Thread类的继承使用实例2【范例19-6】 Runnable接口实现多线程使用实例2,19.3 线程的状态,任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止1. NEW2. RUNNABLE3. BLOCKED4. WAITING5. TIMED_WAITING6. TERMINATED,19.4 线程操作的一些方法,19.4.1 取得和设置线程的名称 19.4.2 判断线程是否启动 19.4.3 后台线程与setDaemon()方法 19.4.

5、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()方法来测试线程是否已经启动而且仍然在启动【范例19-9】 判断线程是否启动,19.4.3 后台线

6、程与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 同步代码块 19.5.3 同步方法 19.5.4 死锁,19.5.1 同步问题的引出在卖票

7、程序中可能碰到一种意外,同一张票号被打印两次或多次,也可能打印票号为0或是负数。这个意外出现的原因在下面这部分代码中 if(tickets0) System.out.println(Thread.currentThread().getName()+“出售票“+tickets-);【范例19-15】 线程的同步问题,19.5.2 同步代码块要解决上面的问题,必须保证下面这段代码的原子性if(tickets0) System.out.println(Thread.currentThread().getName()+“出售票“+tickets-);,19.5.3 同步方法同步方法定义语法如下访问控制

8、符 synchronized 返回值类型 方法名称(参数). ;,19.5.4 死锁一旦有多个进程,且它们都要争用对多个锁的独占访问,那么就有可能发生死锁。如果有一组进程或线程,其中每个都在等待一个只有其它进程或线程才可以执行的操作,那么就称它们被死锁了【范例19-16】 程序死锁的产生,19.6 线程间通讯,19.6.1 问题的引出 19.6.2 问题如何解决,19.6.1 问题的引出把一个数据存储空间划分为两部分:一部分用于存储姓名,一部分用于存储性别。应用含两个线程:一个添加数据(生产者);一个取出数据(消费者)。程序有两种意外需要考虑:1. 假设生产者线程刚向数据存储空间中添加了一个人

9、的姓名,还没有加入这个人的性别,CPU就切换到了消费者线程,消费者线程将把这个人的姓名和上一个人的性别联系到了一起,19.6.1 问题的引出2. 生产者放了若干次数据,消费者才开始取数据,或者是,消费者取完一个数据后,还没等到生产者放入新的数据,又重复取出已取过的数据,19.6.2 问题如何解决编写两个包含有run方法的类来完成这两个线程,一个是生产者类Producer,一个是消费者类Consumerclass Producer implements Runnablepublic void run()while(true)/ 编写往数据存储空间中放入数据的代码,19.6.2 问题如何解决【范例19-17】 线程之间的通讯【范例19-18】 进程同步使用范例【范例19-19】 线程间通讯问题的解决,19.7 线程生命周期的控制,任何事务都有一个生命周期,线程也不例外,控制线程生命周期的方法有很多种,如:suspend方法、resume方法和stop方法,但这三个方法都不推荐使用【范例19-20】 线程的生命周期范例,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 软件工程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报