《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程

上传人:E**** 文档编号:89398391 上传时间:2019-05-24 格式:PPT 页数:16 大小:44.50KB
返回 下载 相关 举报
《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程_第1页
第1页 / 共16页
《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程_第2页
第2页 / 共16页
《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程_第3页
第3页 / 共16页
《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程_第4页
第4页 / 共16页
《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程》由会员分享,可在线阅读,更多相关《《Java语言程序设计》-郭磊-电子教案 第05章 Java中的多线程(16页珍藏版)》请在金锄头文库上搜索。

1、第五章 Java中的多线程,教授:郭磊,【本章导读】,多线程是Java语言的又一重要特征。线程本身并不是操作系统的一个重要概念,大多数程序设计语言并不提供这种并发机制。Java将操作系统的线程概念纳入程序设计语言中,编程人员可利用Java提供的多线程机制,使系统同时运行多个执行体,从而加快程序的响应时间,提高计算机资源的使用效率。 本章介绍Java的多线程机制,包括线程的概念,线程的创建、线程中的常用方法、线程的同步、守护线程等内容。,【本章要点】,线程的概念 线程的创建 线程中的常用方法 线程的同步 守护线程,5.1 线程的概念,在介绍Java的线程使用之前,我们要先明确线程的定义。在Win

2、dows中,我们经常可以一边听音乐,一边和别人在进行QQ聊天,同时,杀毒软件和防火墙可能也在同时运行,这个在同一时间内能进行多中CPU的资源调配的行为就叫做线程。,5.1 线程是怎样工作的呢?,整个操作系统是由多个进程组成的(包括操作系统进程),而一个进程又由多个线程组成(一般处理单任务的进程只有一个线程);在整个操作系统中占用CPU期间,进程分配CPU的时间给每一个线程;进程占用整个内存空间的一部分,而线程占有其所属进程占用的内存空间的一部分;进程由代码、数据和运行环境组成,而线程也由这三者组成。,5.1 线程与进程的区别,进程与线程不同之处在于,每个进程都是独立的它仅在分配给它的内存空间中

3、运行,有自己专属的代码和数据,不能访问其他进程的数据(就算另一个进程来自于同一个程序),进程间的通信必须通过操作系统传达,进程有权不接收其他进程(操作系统关键进程除外)发出的消息;而进程允许代码和数据的共享,一个线程可以使用其他线程的代码,也可以访问其他线程的数据(这可能带来数据冲突的问题,也是本章的主要内容之一),使得线程间的通信比进程间的通信更为方便快捷。,5.2 线程的创建,5.2.1 使用Thread类的子类创建 一个完整的线程的使用过程分为四个步骤 1、创建。 顾名思义,当一个线程对象被声明并创建时,他就处于新键的状态。此时,它已经有了相应的内存空间和其他的资源。 2、运行。 当线程

4、被创建之后,系统并没有给予他生命,他不会自动运行,必须调用start()方法来进行激活,使其进入CPU的运行等待队列中。(在线程没有结束run()方法之前,不要让线程再调用start()方法,否则将发生IllegalThreadStateException错误)。,5.2 线程的创建,3、中断。 有4种方法可以中断线程。 CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态 线程使用CPU资源期间,执行了sleep()方法,使当前线程进入休眠状态。sleep()方法是Thread类中的一个方法,线程一旦执行了sleep()方法,就立即让出CPU的使用权,使当前线程处于中断

5、的状态,经过sleep()方法中规定的时间,该现成就重新进入线程队列中等待CPU资源,以便从中断处继续运行。 线程使用CPU资源期间,执行了wait()方法,使线程进入等待状态,不会主动的进入线程队列中等待CPU资源,当其他的线程调用notify()方法通知,才能使的等待状态中的线程重新回到线程队列中,等待CPU分配资源。 异常错误,比如是读/写操作引起的阻塞。当引发类似问题时,线程不能进入使用队列,当阻塞消除时,线程才重新回到等待队列中。 4、死亡。 简单的说就是结束了run()方法,无论是线程自己执行完毕还是说被强制的结束了run()方法。线程就释放了内存。,5.2 线程的创建,5.2.2

6、 使用Runable接口创建 在介绍Runable接口之前,需要先介绍一下他和Thread类的区别:Thread类可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法,使线程具有某种功能。但是Java不支持多继承,Thread类的子类不能再继承其他的类,因此,在某些需要的情况下,只能采用实现Runnable的方式。,5.3 线程中的常用方法,1、run方法 run 方法是运行线程时需要执行的代码。我们要用代码也就是 run() 方法来描述一个处理过程,而不是创建一个表示这个处理过程的对象。 2、start方法 线程调用该方法以后将启动线程,从此开始从新建状态进入到等待队列

7、,当CPU把资源分配到他的时候,他就开始自己的生命周期了。 3、 sleep方法 sleep()方法指的是一种让线程让出CPU资源的方法,他的执行可以暂时停止CPU对此线程的资源分配,把这些资源让给别的线程进行使用。sleep()方法执行时,线程进入睡眠状态,当sleep()所规定的时间结束之后,线程又重新进入等待队列中。,5.3 线程中的常用方法,4、isAlive方法 有时候线程可以处于一个未知的状态。isAlive()方法用来确定一个线程是否还活着。活着的线程不一定正在运行,未在活着的线程也不一定就是死亡的线程,对于一个处于激活状态的线程,他的返回值是true。 5 、currentTh

8、read方法 currentThread()方法是Thread类中的一个类方法,他可以使用类名进行调用,该方法返回的是当前正在使用CPU资源的线程。 6、 interrupt方法 关于interrupt方法,他总是和sleep方法配合使用,在一个线程中,总是sleep方法是的这个线程进入睡眠状态,之后在某个时间中,在用interrupt方法将其唤醒。,5.4 线程同步,这种多个线程试图同时使用相同且有限的资源的情况,是很有可能发生的,若不是提供某种机制避免这种情况的出现,后果将可能是非常严重且不可预料的,如造成某种线程数据的不一致,使某些线程陷入无限循环永远无法退出,破坏某些文件或者数据库中的

9、重要数据。,5.4 线程同步的处理方法,在处理同步线程的时候,我们经常使用wait()、notifyAll()和notify()方法来实现同步线程之间的控制,这3个方法都是Object类中的final方法,被所有的类所继承,而且不能被重写。当一个线程使用的同步方法中使用的某个变量需要别的线程来修改的时候,我们就可以用wait()方法。它可以中断线程的执行,使他处于等待状态,让CPU让出使用资源,当变量被处理之后,在使用notify()来唤醒线程,继续执行这个同步线程。,5.5 守护线程,线程分为用户线程和守护线程两种。一般一个线程都是非守护的,非守护的线程也被称为拥护(user)线程。 守护线

10、程的特点是:守护线程常常是一个死循环,常常用来监视其他线程的运行,并且提供一些通用性的服务。但是一旦所有的用户线程都运行完毕,那么,守护线程也将被Java所结束。 一个线程在被调用前要先设置自己是否是守护线程。设置的方法是:调用setDaemon(boolean)方法进行设定,由于一般的线程都默认为非守护的所以在使用的时候,setDaemon()方法都设定为true。而由main()方法创建的线程都是非守护的线程。,本章小结,本章介绍Java中的多线程,其中包括多线程的概念、线程的创建、线程同步、守护线程等多线程的相关知识。通过本章的学习,读者需要掌握多线程的基本知识,能够在多线程的应用领域合理利用本章的知识,使程序能够更好地利用系统资源,同时完成较为复杂的一系列功能。,习 题,一、简答题 1Java的线程是如何实现的? 2线程的生命周期有哪几种状态? 3Java中用什么方法来同步数据的访问? 二、编程题 1计算素数。编写两个线程,一个线程用来计算2100000之间的素数及个数,第二个用来计算100000200000之间的素数及个数。 2时钟程序。编写三个线程分别现实各自运行的时间,第一个线程每隔1秒钟运行一次,第二个每隔5秒钟运行一次,第三个线程每隔10秒钟运行一次。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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