面向程序基础设计 7_第1页
面向程序基础设计 7_第2页
面向程序基础设计 7_第3页
面向程序基础设计 7_第4页
面向程序基础设计 7_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计与实践第九章Java多线程面向对象程序设计与实践课程组教学目标教学方式重点知识学习目标1.掌握线程的基本概念以及相关知识,培养自主学习能力2.掌握线程的创建与启动的基本方式和线程类的申明与继承,锻炼动手能力3.能够描述和理解线程之间调度的能力,培养逻辑思维能力4.能够分析线程的同步以及相关程序设计的实现,锻炼程序设计能力1.线程的状态转换的分析2.线程同步以及线程同步程序设计本章节以理论讲解、效果演示、代码讲解为主。学生应该掌握线程的创建与启动的基本方式和线程类的申明与继承,能够描述和理解线程之间调度的能力,并为学习javaee打下基础。目录CONTENTS019-1多窗口售卖电影票029-2抽奖箱

039-3用户点餐01多窗口售卖电影票案例描述案例分析关联知识案例实现案例小结案例拓展9-1案例描述假设电影院有3个窗口同时售卖10张电影票,电影票座位号为1~10,请模拟该过程。9-1关联知识进程概述(1)进程是程序的一次执行过程,是系统运行程序的基本单位线程概述(1)线程是一个比进程更小的执行单位(2)一个进程在其执行的过程中可以产生多个线程Java多线程编程(1)在一个进程中可以并发多个线程,每条线程并行执行不同的任务(2)多线程能满足编写高效率的程序来达到充分利用CPU的目的多线程能满足编写高效率的程序来达到充分利用CPU的目的9-1关联知识线程的生命周期(1)线程是一个动态执行的过程,在执行过程中线程一共有五种状态,即创建状态、可运行状态、运行中状态、阻塞状态、死亡状态9-1关联知识使用Thread类创建线程(1)java.lang.Thread类用于操作线程,是所有涉及线程操作的基础(2)使用Thread类创建线程的方法是定义一个类继承Thread类,继承类必须重写Thread类中的run()方法,创建该类对象,通过对象调用start()方法启动线程Thread类构造方法(1)Thread()(2)Thread(Stringname)(3)Thread()(4)Thread(Runnablet,Stringname)9-1关联知识Thread类常用方法(1)getName()(2)getPriority()(3)join()(4)join(longmillis)(5)run()(6)sleep(longmillis)(7)start()(8)toString()(9)currentThread()9-1关联知识通过实现Runnable接口创建线程(1)创建线程通过创建一个实现Runnable接口的类来创建线程对象(2)在Runnable接口中只有一个方法,即voidrun()方法,并没有start()来开启线程。所以需要把实现Runnable接口的类对象作为参数传递到Thread类的publicThread(Runnabletarget)构造方法中,然后再调用start()方法开启线程9-1案例分析交流与讨论结合案例分析,思考一下几个问题:进程和线程的区别两种创建线程方式对比9-1案例实现9-1案例小节基本概念线程的生命周期创建线程进程、线程、Java多线程编程

线程的五种状态Thread类和Runnable接口创建线程9-1案例拓展在本案例中通过实现Runnable接口创建线程来模拟电影院售票,请思考如何使用Thread类创建线程实现02抽奖箱案例描述案例分析关联知识案例实现案例小结案例拓展9-2案例描述现有一个抽奖池,抽奖池中存放了奖励的红包,红包金额分别为1,5,10,20,100,200,500,1000。每种金额的红包只有1个,在抽奖池中设立两个抽奖箱同时抽奖,请模拟该过程。9-2关联知识线程安全问题(1)当在程序中使用多个线程访问同一资源时,多个线程都对资源有写的操作,这就很容易出现线程安全问题线程同步操作(1)线程同步是指确保资源被一个线程访问的同时不被其他线程访问,这也叫互斥访问(2)多线程能满足编写高效率的程序来达到充分利用CPU的目的多线程能满足编写高效率的程序来达到充分利用CPU的目的(3)在Java中一共有两种方式实现线程的同步操作,分别为同步代码块和同步方法9-2关联知识同步代码块(1)将synchronized关键字用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问synchronized(锁对象){

可能出现线程安全问题的代码(访问了共享数据的代码)}9-2关联知识同步方法(1)同步方法是使用synchronized关键字修饰的方法,保证了当一个线程执行该方法时,其他线程只能等待线程执行完该方法后才可执行权限修饰符synchronized返回修饰符方法名(){可能会产生线程安全问题的代码}9-2案例分析交流与讨论结合案例分析,思考一下几个问题:该案例中是否存在线程安全问题采用什么方式解决9-2案例实现创建线程9-2案例实现测试类9-2案例小节线程安全问题线程同步操作什么情况下会产生线程安全问题

同步代码块、同步方法9-2案例拓展本案例中使用同步代码块来避免产生线程同步操作,请思考使用同步方法如何实现03用户点餐案例描述案例分析关联知识案例实现案例小结案例拓展9-3案例描述在餐厅中当用户点好餐后通知餐厅,餐厅做好用户点的餐后再通知用户,模拟该过程9-3关联知识线程管理的常用方法(1)join()方法-可以使一个线程等待另一个线程执行完毕后再执行,使用join()方法可以使多线程的执行更加有序假设我们需要吃一碗泡面,要经历四个步骤:放水、下面、吃面、洗碗。我们可以创建四个线程来代表这四个步骤,可是如果我们直接开启四个线程,则这四个线程的执行顺序不一定是我们想要的顺序,这时我们就需要使用join()方法来完成。9-3关联知识线程管理的常用方法(2)sleep()方法-一般用来暂停线程,使线程从运行状态转到阻塞状态,直到我们设置的暂停时间结束,线程再次回到就绪状态程序的执行速度受多方面因素的影响,比如电脑性能,算法的时间复杂度等。但总体来说一个线程的执行速度是非常快的,在本例中我们使用sleep()方法来模拟秒表,一秒输出一次。9-3关联知识线程管理的常用方法(3)线程优先级-在Java中,每个线程都具有优先级,JVM会根据线程的优先级决定线程的执行顺序,这样可以使多线程合理共享CPU资源而不会产生冲突,通过setPriority(int)方法可以改变线程的优先级。(4)yield()方法-使用yield()方法会使当前线程从执行状态(运行状态)变为可执行态(就绪状态)(5)wait()方法-使线程暂停执行,等待其他线程执行notify()方法或notifyAll()方法后再继续执行本线程(6)notify()方法-用来随机选择一个在该对象调用wait()方法的线程,解除阻塞状态(7)notifyAll()方法-可以唤醒所有等待该对象的线程

9-3关联知识线程间通信(1)多个线程处理同一资源且任务不同时,需要线程通信来帮助解决线程之间一个变量的使用或操作(2)通过调用wait()方法、notify()方法、notifyAll()方法来使各个线程能够有效地利用资源,这就是线程之间的通信,也叫做等待唤醒机制(3)在调用wait()方法、notify()方法、notifyAll()方法时要注意以下几个方面:wait()方法与notify()方法必须要由同一个锁对象调用。wait()方法、notify()方法、notifyAll()方法都属于Object类的方法。wait()方法和notify()方法必须要在同步代码块或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论