




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务三:飘动字幕动画程序设计单元五:Java语言高级程序设计教学目标知识目标掌握线程的概念以及线程与进程的区别;理解线程的状态和生命周期;掌握Thread类和Runnable接口的常用方法。能力目标运用多线程的实现方法处理线程问题;能会继承Thread类或实现Runnable接口来完成多线程技术实现。教学内容4任务陈述123知识准备任务实施任务拓展任务实训5任务描述:
运用Java多线程技术编写一个简单的动画,要求运行程序时窗口会显示一个飘动的字幕,每隔1秒字幕会自动改变显示的位置,先自左向右移动,到达窗口右边界时,再改变为自右向左移动。运行结果:1.任务陈述
计算机用来模拟和解决人们现实生活中问题,因此使用编程语言描述现实世界同样需要串、并行共存。计算机中的并行处理即同时处理多个任务,一般叫“多任务”。多任务处理方式的优点是充分利用CPU资源,提高效率。含有多个CPU的计算机可将不同任务分配到不同CPU实现并行处理;单CPU则靠快速切换任务来模拟并行处理,使系统的空转时间最少。2.知识准备3.1线程与进程的概念和关系3.1.1线程与进程的概念程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。进程(Process)是程序关于某个数据集合上的一次运行活动,对应了从代码加载、执行至执行完毕的一个完整过程,是系统进行资源分配和调度的一个独立单位。线程(Thread)是进程的一个实体,CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。2.知识准备3.1.2线程与进程的关系一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。操作系统把资源分配给进程,而同一进程的所有线程共享该进程的所有资源。进程和线程的关系可以比喻成:当打开Word(Office中的Word)程序,编写工作计划.doc文件---打开一个进程而当执行这个文件的打印工作---调用了Word中的一个线程线程是作为CPU调度和分配的基本单位,而进程是拥有资源的基本单位。2.知识准备3.2线程的生命周期
一个线程都要经历一个从出现到死亡的过程,我们把这个过程称之为生命周期。线程的生命周期包括4种状态:New(新生)、Runnable(可运行)、Blocked(被阻塞)和Dead(死亡)。2.知识准备3.2.1新生状态当使用new操作符创建一个新的线程时,线程并不是马上进行运行,此时线程处在新生(new)状态。3.2.2可运行状态当处于新生状态的线程调用了start方法后,线程就开启了成为了可运行(Runnable)了。3.2.3被阻塞状态当线程在可运行状态下执行了睡眠(sleep)、阻塞I/O操作、等待(wait)等操作后,线程就进入了被阻塞状态,另一个线程就可以被调度运行了。3.2.4死亡状态线程在可运行状态下经过一个正常的run方法结束完成自然死亡。再有就是可以使用stop方法来杀死一个线程,同时抛出一个ThreadDeath错误对象。2.知识准备注意:Java规范中并没有把运行单独作为一个状态,因为即使调用了start方法,是否接着运行还要看CPU是否有空闲调用。3.3线程的创建3.3.1Thread类的简介Thread类是Java提供用来的创建线程的核心类,存在于java.lang包中,它综合了一个线程所需的属性和方法,可以使用该类进行线程的创建、线程的常用操作以及设置线程优先级等。
常用方法:
构造方法:
publicThread():创建一个新的线程对象。
publicThread(Stringname):创建一个名字为name的新线程对象。
publicThread(Runnabletarget,Stringname):在现有的target对象基础
上创建一个名字为name的线程对象,新的对象实际上是把target作为
了运行对象。2.知识准备常用方法:
publicvoidstart():启动线程。如果能获得CPU的使用权就会自动执行调用run()方法。
publicvoidrun():这是Thread线程类中最重要的方法,是线程执行的起点,线程具体的操作都要编写在此方法中。publicstaticvoidsleep(longmills):使正在运行的线程休眠mills好秒后再运行。publicfinalgetPriority():获得线程的优先级。publicfinalsetPriority(intpriority):设置线程的优先级。publicfinalbooleanisAlive():判断线程是否在活动,如果是返回true,否则返回false。2.知识准备3.3.2Runnable接口Java不支持多继承。一旦一个类继承了Thread类,就不能再继承其他的类。用户若想让其他类支持多线程,那么这个类还可以通过实现Runnable接口。Runnable接口位于java.lang包中,只提供了一个run()方法,该方法与Thread类中run()方法作用一样,线程执行的具体操作都要写在此方法中。2.知识准备3.3.3使用Thread类创建线程创建步骤:首先编写的线程类需要继承Thread类来实现多线程。其次设计Thread的子类,然后根据工作需要重新设计线程中的run方法(方法的重写)。最后再使用start方法启动线程,将执行权转交给run()方法。【例5-1】下面示例演示使用Thread类来创建线程并启动线程,然后要求在线程中进行每隔1秒钟打印一行数据。2.知识准备【注意】这个程序的运行结果在不同机器上结果是不一样的,到底什么时候使用线程1还是线程2是由操作系统的线程处理机制控制的。并且这个运行不会结束,只有强行关掉应用程序线程才会关闭。因此注意在写run()方法时一定要在里面加入结束判断语句,可以是有限次的循环,也可以是对某个界限的判断。publicclassThreadExextendsThread{//继承Thread类publicThreadEx(Stringname){//带名字的构造方法super(name);}//重写run()方法,编写代码publicvoidrun(){System.out.println(this.getName()+”打印信息”);try{Thread.sleep(1000);//让线程休眠1秒钟,并抛出异常}catch(Exceptionex){ex.printStackTrace();}}publicclassMain{publicstaticvoidmain(Stringargs[]){//创建线程对象ThreadExthread1=newThreadEx(“线程1”);ThreadExthread2=newThreadEx(“线程2”);//启动线程thread1.start();thread2.start();}}【例5-1】关键代码上面的例子没有办法预测是哪个线程先运行是因为这两个线程被CPU认为是相同优先级的线程。如要想使得线程之间可以有个预想的执行顺序那么可以通过setPriority(intpriority)方法来设置线程的优先级,优先级的改变是可以影响CPU调用线程的顺序。优先级是一个1-10的数,默认为5,Thread类中包含了3个静态常量:publicstaticfinalintNORM_PRIORITY=5publicstaticfinalintMIN_PRIORITY=1publicstaticfinalintMAX_PRIORITY=10【例5-2】根据上例加入线程优先级设置,要求线程1的优先级最高,线程2的优先级最低。2.知识准备publicclassThreadExextendsThread{//继承Thread类publicThreadEx(Stringname,intpriority){//带名字的构造方法super(name);this.setPriority(priority);}publicvoidrun(){//与上例一样}publicclassMain{publicstaticvoidmain(Stringargs[]){//创建线程对象,并设置优先级ThreadExthread1=newThreadEx(“线程1”,Thread.MAX_PRIORITY);ThreadExthread2=newThreadEx(“线程2”,Thread.MIN_PRIORITY);//启动线程thread1.start();thread2.start();}}【例5-2】关键代码3.3.4使用Runnable接口创建线程创建步骤:首先线程类需要实现Runnable接口;其次实现接口中的run()方法;然后创建一个线程对象,并将对象作为参数传递给Thread类的构造方法,从而生成一个Thread类;最后调用start()方法启动线程。【例5-3】下面示例演示使用Runnable接口来创建线程并启动线程,然后要求在线程中进行没隔1秒钟打印一行数据。2.知识准备publicvoidrun(){System.out.println(name+”打印信息”);try{Thread.sleep(1000);//让线程休眠1秒钟,并抛出异常}catch(Exceptionex){ex.printStackTrace();}}publicstaticvoidmain(Stringargs[]){//创建线程目标对象RunnableExre1=newRunnableEx(“线程1”);RunnableExre2=newRunnableEx(“线程2”);//创建线程对象Threadt1=newThread(re1);Threadt2=newThread(re2);//启动线程t1.start();t2.start();}【例5-3】关键代码实施思路在窗口中,通过JLabel显示一行文字,通过启动一个线程,在线程中每隔一秒改变一次JLabel对象的位置可实现字幕飘动的动画效果;创建一个主类MovingText继承JFrame实现Runnable接口;主类MovingText构造方法中创建JLabel对象,创建线程对象并启动线程;实现Runnable的run方法,用sleep方法休眠一秒,修改JLabel对象位置;在main方法中实例化MovingText。3.任务实施程序代码publicvoidrun(){
try{
Threadt=Thread.currentThread(); System.out.println("当前线程是:"+t); while(true){
Thread.sleep(1000);//睡眠一秒钟
m_label.setBounds(10+i*10,100,150,50);//设置飘动标志 if(i>20) bRight=false; if(i<0) bRight=true; if(bRight) i++; else i--; } }catch(Exceptione){ }3.任务实施一、实现Runnable接口比继承Thread类所具有的优势1.适合多个相同的程序代码的线程去处理同一个资源;2.可以避免java中的单继承的限制;3.增加程序的健壮性,代码可以被多个线程共享,代码和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商品房预售抵押合同
- 筒仓钢管楼梯施工方案
- 变压器采购合同采购合同
- 商铺物业服务合同
- 酒店装修改造施工方案
- 外墙面铝钢板加固施工方案
- 2025届甘肃省兰州市部分学校高三一模地理试题(原卷版+解析版)
- 连云港燃气管道施工方案
- 计划生育手术器械项目风险识别与评估综合报告
- 2025年人力资源制度:04 -艺人签约合同书
- 2025年陕西国防工业职业技术学院单招综合素质考试题库学生专用
- 2025年浙江宁波市奉化区农商控股集团有限公司招聘笔试参考题库附带答案详解
- 2025年中考百日誓师大会校长发言稿:激扬青春志 决胜中考时
- YY/T 1860.1-2024无源外科植入物植入物涂层第1部分:通用要求
- 中央2025年全国妇联所属在京事业单位招聘93人笔试历年参考题库附带答案详解
- 上海浦东新区2024-2025高三上学期期末教学质量检测(一模)物理试卷(解析版)
- 人教版高中物理选择性必修第二册电磁波的发射与接收课件
- 2025河南中烟工业限责任公司一线岗位招聘128人易考易错模拟试题(共500题)试卷后附参考答案
- 《建筑冷热源》全册配套最完整课件1
- 广州2025年广东广州市番禺区小谷围街道办事处下属事业单位招聘5人笔试历年参考题库附带答案详解
- 2025年春新人教版生物七年级下册全册教学课件
评论
0/150
提交评论