Java08_线程与定时器程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/32Java技术与应用西安交大卫颜俊2011年11月电子信箱:Mr.Java@163.com网站:线程与定时器程序设计(第7章)2/32主要内容☻程序、进程与线程☻线程程序设计☻定时器程序设计3/321.程序、进程与线程4/32程序的概念☻何为程序☺程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。☻Windows下的可执行文件☺exe、dll☺class、jar☺bat、cmd、……☻程序的开发工具☺JBuilder、VC++、Delphi、VB5/32进程、线程的概念☻进程☺程序的一次执行,是系统进行资源申请、调度和独立运行的单位☺三个状态:就绪、运行和停止☺具有优先级☻线程☺包含指令序列,是程序运行的基本单位,它比进程更小,仅作为CPU调度单位,只拥有必不可少的资源☺三个状态:就绪、阻塞(等待)和执行☺具有优先级。◆6/32进程与线程的关系☻进程是线程的容器,它必须拥有一个在它的环境中运行的主线程以负责执行包含在进程的地址空间中的代码。☻主线程可以创建其它子线程。◆7/32多线程☻多线程间共享数据和代码空间☻一个进程内可以运行多个线程☻单CPU实现多线程并行执行的方式☺划分极短的CPU时间片A☺各线程轮流占用一个时间片◆B8/32多线程的典型用途☻提高CPU利用率CPU在等待慢速操作(磁盘、网络)之时,还可以进行其它处理☻比较耗时的后台操作交给线程管理放在单独的线程里,优点:方便控制、低优先级、不影响用户界面的及时响应☻断点续传☻网络爬行程序☻音视频点播系统◆9/322.线程程序设计10/32与线程相关的类java.lang包:Thread类包括的函数:run、start、stop、sleep、interrupt、……需要继承之得到子类Runnable接口包括的函数:run需要实现之得到子类11/32建立一个线程主(缺省)线程:☺Application:main()☺Applet:浏览器用户自定义线程(多线程)☺创建Thread子类,继承类Thread•在Thread子类的run()方法中定义用户线程工作•在主线程中使用start()启动线程实例,该线程被调度时系统自动执行run()方法☺创建Thread子类,实现Runnable接口•用本类实例作参数,创建Thread类的实例,继承本类中的run()方法,实现子线程的任务•在主线程中使用start()启动线程实例,该线程被调度时系统自动执行run()方法◆12/32继承类Thread编写publicvoidrun(){}方法,完成线程的任务run()缺省为空,可以覆盖。举例:publicclassMyUsefulThreadextendsThread{publicvoidrun(){//...}}通过调用start()方法来启动线程:MyUsefulThreadt=newMyUsefulThread();t.start();◆13/32实现接口Runnable☻实现接口Runnable和方法run()举例:publicclassMyUsefulThreadimplementRunnable{publicvoidrun(){//...}}☻通过调用start()方法来启动线程:Threadt=newThread(newMyUsefulThread());t.start();◆14/32线程入门级例子】☻设计两个线程分别显示指定的不同范围内的所有整数15/32算法简述1.建立一个线程类,在run方法中显示指定范围内的所有整数2.在主方法中构造其两个对象,指定的范围分别是0~1000和2000~30003.启动这两个线程16/32思考题1.如何改变两个线程的结果显示顺序?2.两个以上线程时该如何处理?3.线程中可以有子线程吗?4.线程任务可以替换◆17/32线程的状态与调度Java提供了线程调度器监控就绪状态中的所有线程。☺按照线程的优先级来决定调度哪些线程(优先级由高到低)。☺线程的调度是抢先式的(较高优先级的线程代替当前线程进入就绪状态)。☺同优先级的线程采用轮转法。Thread.MIN_PRIORITY----Thread.MAX_PRIORITY(1--10)线程的缺省优先级为Thread.NORM_PRIORITY(5)。线程创建时继承父线程的优先级方法intgetPriority()取得线程的优先级,voidsetPriority(intnewPriority)设置线程的优先级。◆18/32线程再举例:计算阶乘☻同时计算n、m、p、q的阶乘19/32多线程举例1.两个机器人从同一起点出发,比赛,看随先到达终点。2.两个机器人从不同点出发,看何时到达同一个点。20/32多线程应用实例☻天气预报服务器。21/32线程的同步问题的提出线程对内存、数据的共享线程执行的不确定性引起执行结果的不稳定问题的解决同步:用synchronized关键字前缀给针对共享资源的操作加锁;同步方法、同步块使用synchronized来实现一次只能有一个线程的一个方法或代码块执行的功能。管程:最先进入同步块的线程拥有该块的管程,其他线程将不能执行该块代码,不能改变共享变量,直到原线程结束或调用wait()释放管程◆22/32线程同步的实现wait():令当前线程挂起并放弃管程,同步资源解锁,使别的线程可访问并修改共享资源,而当前线程排队等候再次对资源的访问notify()唤醒正在排队等待资源管程的线程中优先级最高者,使之执行并拥有资源的管程wait()+notify()+标志变量:可协调、同步不同线程的工作sleep():休眠时并不放弃监控器(monitor)◆23/32☻具体编程时,使用关键字synchronized(即同步控制)类方法的格式:synchronizedreturnTypemethodName([paramList]){…}使用synchronized来实现一次只能有一个线程执行一个方法或代码块的功能。并通过方法wait()和notify()来实现线程间的同步通讯。◆24/32线程同步实例☻银行事务模拟25/32线程的死锁死锁不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁解决方法专门的算法、原则尽量减少同步资源的定义◆26/323.定时器程序设计27/32定时器☻线程由操作系统管理和调度☻定时器可以由程序自身来定制☻Timer定时器类用于安排在后台线程中执行的任务。Timer()构造一个新定时器。cancel()终止此定时器,丢弃所有当前已安排的任务。schedule(TimerTasktask,longdelay,longperiod)安排指定的定时器任务从指定的延迟后开始进行重复的固定周期执行。◆28/32定时器任务TimerTask定时器任务类☺安排给Timer的重复执行的任务☺一个抽象类,需要继承得到其子类☺并实现其run方法,并指定定时器任务要执行的操作run方法的格式如下:publicvoidrun(){……}◆29/32定时器程序设计的步骤⑴建立定时器任务类,并编写run方法,比如:classMyTimerTaskextendsTimerTask{publicvoidrun(){}}⑵构造定时器任务类的对象,比如:MyTimerTaskmyTimerTask=newMyTimerTask();⑶构造定时器类的对象,比如:TimermyTimer=newTimer();⑷调用定时器的schedule方法,传递定时器任务对象,初始延迟和间隔时间等三个参数,启动定时器任务⑸必要时,使用定时器的cancel方法来结束定时器的执行◆30/32定时器举例☻建立一个计时程序,当到达指定时间时,予以提示。☻建立一个倒计时程序,当到达指定时间时,退出程序。☻图形屏保程序☻照片屏保程序31/32定时器举例(续)☻思考题:1.一个定时器1ms,另一个10ms,该如何处理?2.如何停止定时器任务的执行?定时器的cancel()、定时器任务的cancel()?3.需要三个定时器任务时该如何进行?4.定时器任务可以替换◆32/32

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功