Java程序设计:第17章线程

上传人:汽*** 文档编号:568782291 上传时间:2024-07-26 格式:PPT 页数:23 大小:75KB
返回 下载 相关 举报
Java程序设计:第17章线程_第1页
第1页 / 共23页
Java程序设计:第17章线程_第2页
第2页 / 共23页
Java程序设计:第17章线程_第3页
第3页 / 共23页
Java程序设计:第17章线程_第4页
第4页 / 共23页
Java程序设计:第17章线程_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《Java程序设计:第17章线程》由会员分享,可在线阅读,更多相关《Java程序设计:第17章线程(23页珍藏版)》请在金锄头文库上搜索。

1、第第17章章 线程线程线程就是实现并发的一种有效的手段,多线程是现代操作系统开发的发展方向。就好比一个人在手忙脚乱的时候,总希望再分身出一个自己,或者是恨不得多长出一只手来,那多出来的“分身”或者是希望多长出来的手就相当于线程,也就是多线程。17.1 线程的概念线程的概念在介绍线程之前,需要了解一下什么是进程,进程就是一个执行的程序任务,多进程的多任务处理特点就是允许计算机同时处理两个或两个以上的程序。线程则是比进程要小的执行单位,前面介绍的进程则是由线程来进行管理的。一个多线程的程序要比多进程的程序需要更少的管理资源。线程要比进程的划分粒度要小的多,如果需要新建一个进程,就要为其单独分配内存

2、空间,而在新建一个线程则不需要为其分配内存空间。所以新建一个进程需要耗费更多时间和资源。线程不能够独立运行,必须驻留在一个进程内部,并且由进程为其实现任务的调度。17.2 线程的创建线程的创建线程和普通的程序一样,都需要有第三方才可以启动。线程的创建包括有主线程的创建、实现Runnable接口和集成Thread类。在本节中就主要介绍线程的创建。17.2.1 使用使用Thread创建线程创建线程程序的主线程是在程序启动的时候就开始执行的,它是所有线程中最早开始运行的;也就是所有的Java程序在运行时都有一个线程,它还是产生其他子线程的线程,而且要用它来控制线程的各种动作。主线程是在程序启动的时候

3、自动创建的,但是它也是可以由Thread对象控制的。可以通过Thread对象调用相关的方法获取一个主线程的引用,然后控制其他线程。17.2.2 使用使用Runnable创建线程创建线程前面使用的是继承Thread类的方法来创建线程,在此使用Runnable接口的方法来创建线程。该方法是创建线程最简单的方法,只需要创建一个实现Runnable接口的类,Runnable抽象了一个执行代码单元,可以通过实现Runnable接口来创建每一个对象的线程。17.2.3 两种方法比较两种方法比较使用继承Thread和实现Runnable的方法来创建线程,这两种方法的区别在于创建线程的本质上。Thread类中

4、定义了很多方法可以被它的子类重载,但是只有一个run()方法必须被重载,而这个方法也是Runnable接口所必需的。Runnable接口来实现创建线程的方法要比使用Thread方法要好,而且体现了面向对象的编程思想。实现Runnable接口不影响继承其它类,也不影响实现其它的接口。只是让该类多了线程的能力,显然这样做使得程序更加灵活。17.2.4 创建多线程创建多线程前面介绍了创建线程,本小节主要介绍创建多线程。17.3 线程的使用线程的使用17.3.1开启线程当线程创建完成后,它还只是一个普通的对象,并没有真正的执行,如果让它成为独立的执行线程,就必须要启动它。就好比是一辆汽车,走之前需要打

5、火启动。run()方法可以作为普通的方法一样调用,但是调用了run()方法之后并不代表着新建了执行线索。如果开启一个线程,只需要调用start()方法就可以了。17.3.2 休眠线程休眠线程休眠方法是让线程休眠一段指定的时间,等执行时间到了以后,线程会进入准备状态,等待线程调度程序的调度。线程休眠的方法有以下两个。publicstaticvoidsleep(longmillis)throwsInterruptedExceptionpublicstaticvoidsleep(longmillis,intnanos)throwsInterruptedException17.3.3 等待线程等待线程

6、汽车在行驶在马路上时,遇到红灯总会停下来,等绿灯之后才可以继续行驶。在线程中,也可以让线程暂时停止下来。Join()方法又叫加入方法。就是让一个线程跟随在另一个线程之后运行,当一个线程运行结束后,再继续来运行另一个线程。17.4 线程的控制线程的控制17.4.1线程的优先级线程的优先级用来判定何时运行某个线程。优先级高的线程能够够比优先级低的线程获得更多的cpu时间,设置线程的优先级,可以使用setPriority()方法来设置。使用方法为:finalvoidsetPriority(intlevel)17.4.2 线程让步线程让步行驶在公路上,如果遇到有鸣笛急救车或者是鸣笛警车,要主动为他们让

7、路。线程中要也有让步方法,yield()方法又叫让步,可以使当前运行的线程回到可运行的状态,让具有相同优先级的线程获得运行的机会。称yield方法为让步方法,但其往往达不到让步的效果,它只是让当前的线程回到可以运行的状态。17.4.3 线程同步线程同步为了便于理解同步问题,这里用一个实例来说明同步问题的由来。假如在一个办公室里只有一个打印机,假设这个打印机在收到信息后就把信息打印出来。有多个老师要使用它打印学生成绩,它们可能同时进行请求,即在打印机处理一个打印任务的时候又同时收到了其它的打印请求。老师们希望打印机可以一个个的处理打印任务,但在这种情况下显然会出现混乱。17.4.4 多线程的死锁

8、问题多线程的死锁问题在任何的并发运行的系统中,都存在有多个访问者互斥的资源是,就会发生死锁的现象。如果系统的设计不完善,Java中进行多线程开发中就可能会发生死锁。Java中的死锁就是线程之间相互等待对方释放资源对象的锁,而每一个线程又持有其他线程所需要的锁,就会造成几个线程处于没有必要的永久等待中。17.5 线程池线程池线程池就是在系统中专门开辟一块区域,其中存放一些待命的线程,这个线程就叫做线程池。实际的开发中,线程池的类型也不同,常用的有固定尺寸的线程池和可变尺寸的线程池。固定尺寸的线程池中,待命线程的数量是一定的,并且实现起来比较简单,不过如果需要执行的任务过多的话,就可能会造成大量的

9、等待,如果执行任务过少,也会造成资源的浪费。17.6 Swing线程应用线程应用在图形界面开发中,也会遇到不同的多线程问题。在本节中,就前面所涉及到的线程问题使用到图形界面开发中。17.6.1 多线程模拟钟表多线程模拟钟表使用多线程模拟一个可以走动的钟表,需要使用到多线程中的休眠方法。可以通过休眠方法来实现钟表秒针、分针和时针的时间刷新,从而完成从视觉上的钟表中时针、分针和秒针的走动。17.6.2 线程的优先级模拟赛车线程的优先级模拟赛车使用线程的优先级来模拟汽车比赛。如果优先级比较高的线程锁获得的运行时间就会多一些,优先级低的线程所获得的运行时间相对来说就会小一点。而并非在多线程开发中每一个

10、线程都会有相同运行时间。所以,使用优先级就可以看出在一定的任务下,不同优先级所完成的进度不同。17.6.3 使用断点实现计数器使用断点实现计数器使用多线程的休眠和中断运行线程的方法可以实现一个计数器。在这个计数器中,主要由两个按钮和一个标签组成。两个按钮分别是“开始”和“停止”,单击开始按钮就可以使标签中的数字开始增加计时,单击停止按钮就会调用线程的中断,并且此时数字停止。再次单击开始,则会使时间从零开始重新计时。17.6.4 使用线程实现屏保使用线程实现屏保“璀璨星空璀璨星空”在WindowsXP操作系统中,有一个屏幕保护程序叫“璀璨星空”,这个效果可以使用线程来实现。17.6.5 实现下雪场景实现下雪场景本示例是一个实现空中飘雪的场景,也是使用到多线程休眠方法。该示例和前面的璀璨星空有所不同。在其中雪花是向下飘落,前面的璀璨星空则是向外扩散。17.6.6 实现瀑布效果实现瀑布效果大家都在电视上或者是图片上见到过高山瀑布,在学习了多线程之后,可以使用多线程来模拟一个瀑布的效果。本示例就是一个实现瀑布流水的效果。17.6.7 滚动字幕滚动字幕在平时的广告牌上,经常可以看到LED的显示屏显示有滚动的文字广告,或者是一些出租车后面也有这样的显示屏。在这里可以使用前面所学习到的多线程知识来模拟一个实现文字滚动的滚动字幕。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号