模块10多线程电子课件 Java程序设计案例教程.ppt

上传人:春哥&#****71; 文档编号:90587279 上传时间:2023-05-16 格式:PPT 页数:20 大小:4.20MB
返回 下载 相关 举报
模块10多线程电子课件 Java程序设计案例教程.ppt_第1页
第1页 / 共20页
模块10多线程电子课件 Java程序设计案例教程.ppt_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《模块10多线程电子课件 Java程序设计案例教程.ppt》由会员分享,可在线阅读,更多相关《模块10多线程电子课件 Java程序设计案例教程.ppt(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、目录目录多线程多线程学习目标学习目标理解进程和线程的概念。理解进程和线程的概念。掌握实现线程的方法。掌握实现线程的方法。了解线程的生命周期。了解线程的生命周期。目录目录案例引入案例引入简易时钟简易时钟案例案例说明明 以往开发的程序大多都是单线程的,也就是一个程序从头到尾以往开发的程序大多都是单线程的,也就是一个程序从头到尾地执行,然而,在现实生活中有很多事件的完成都是需要多方面地执行,然而,在现实生活中有很多事件的完成都是需要多方面的协作共同完成的。如生活中常用的时钟,要正确地显示出时分的协作共同完成的。如生活中常用的时钟,要正确地显示出时分秒,能用以前学过的单线程来解决吗?秒,能用以前学过的

2、单线程来解决吗?案例分析案例分析 要实现简易时钟这个案例,用单线程显然是不容易的,这要实现简易时钟这个案例,用单线程显然是不容易的,这就要用就要用Java语言的多线程机制来实现。语言的多线程机制来实现。目录目录10.2 知识准备知识准备10.2.1 线程的概念线程的概念 程序是对数据描述与程序是对数据描述与操作的一段静态代码的操作的一段静态代码的有序集合,是应用程序有序集合,是应用程序执行的脚本。执行的脚本。进程是程序的一次进程是程序的一次执行过程,它对应从代执行过程,它对应从代码加载、执行到执行完码加载、执行到执行完毕的一个完整过程。毕的一个完整过程。线程是比进程更小线程是比进程更小的运行单

3、位,是能独立的运行单位,是能独立运行的基本单位,也是运行的基本单位,也是能独立调度和分派的基能独立调度和分派的基本单位。本单位。虚虚拟CPU代代码数数据据线程的组成线程的组成目录目录10.2 知识准备知识准备10.2.1 线程的概念线程的概念 程序是对数据描述与操作的一段静态代码的有序集合,程序是对数据描述与操作的一段静态代码的有序集合,是应用程序执行的脚本。是应用程序执行的脚本。进程是程序的一次执行过程,它对应从代码加载、进程是程序的一次执行过程,它对应从代码加载、执行到执行完毕的一个完整过程。执行到执行完毕的一个完整过程。线程是比进程更小的运行单位,是能独立运行的基线程是比进程更小的运行单

4、位,是能独立运行的基本单位,也是能独立调度和分派的基本单位。本单位,也是能独立调度和分派的基本单位。目录目录10.2.2 Thread类和类和Runnable接口接口 class 线程类名线程类名 extends Thread public void run()语句块语句块 通过继承通过继承Thread类来创建线程类的一般格式类来创建线程类的一般格式 Java中,创建线程的方法有两种:中,创建线程的方法有两种:通过继承线程类通过继承线程类Thread来创建线程。来创建线程。建立一个实现建立一个实现Runnable接口的类。接口的类。目录目录10.2.2 Thread类和类和Runnable接口

5、接口 Java语言不支持多重继承,即在语言不支持多重继承,即在Java中一个类中一个类只能有一个父类。在实现线程的过程中,如果一个类只能有一个父类。在实现线程的过程中,如果一个类已经继承了其他类,又要实现多线程,那么该类就不已经继承了其他类,又要实现多线程,那么该类就不能通过继承能通过继承Thread类的方法来创建线程了。此时可类的方法来创建线程了。此时可以通过另一种方法来创建线程,即通过实现以通过另一种方法来创建线程,即通过实现Runnable接口来创建线程。接口来创建线程。通过实现通过实现Runnable接口来创建线程接口来创建线程目录目录10.2.3 10.2.3 主线程与线程的生命周期

6、主线程与线程的生命周期 线程是一个动态的执行过程,就如人的生老病死。线程的一线程是一个动态的执行过程,就如人的生老病死。线程的一个生命周期要经历创建、就绪、运行、挂起、终止。线程通个生命周期要经历创建、就绪、运行、挂起、终止。线程通过控制和调度使得线程在这几种状态之间进行转换。过控制和调度使得线程在这几种状态之间进行转换。目录目录10.2.4 线程状态控制方法线程状态控制方法 如果要暂停一个线程可以使用如果要暂停一个线程可以使用supend()方法。方法。在程序运行中可能需要挂起一个线程而不指定多少在程序运行中可能需要挂起一个线程而不指定多少时间。用时间。用resume()方法来恢复线程的执行

7、。方法来恢复线程的执行。挂起一挂起一个线程个线程 用用stop()方法可以停止线程的执行,但是并没方法可以停止线程的执行,但是并没有消灭这个线程,只是停止这个线程的执行。有消灭这个线程,只是停止这个线程的执行。停止停止线程线程 如果希望线程一段时间可以使用如果希望线程一段时间可以使用sleep(long)的方法。的方法。线程线程休眠休眠目录目录10.2.4 线程状态控制方法线程状态控制方法如果想暂停当前运行的线程可以使用如果想暂停当前运行的线程可以使用yield()方法。方法。暂停暂停线程线程 join()方法可以将一个线程加入到当前线程中,方法可以将一个线程加入到当前线程中,当前线程要等待加

8、入的线程完成之后才执行。当前线程要等待加入的线程完成之后才执行。连接连接线程线程 如果要中断一个运行中的线程可以用如果要中断一个运行中的线程可以用interrupt()方法,若要运行已中断的线程可以使用方法,若要运行已中断的线程可以使用start()重新启动。重新启动。中断中断线程线程目录目录10.2.5 synchronized10.2.5 synchronized关键字及线程同步关键字及线程同步 对一种特殊的资源,对一种特殊的资源,Java提供了内建的机制来防止它们提供了内建的机制来防止它们的冲突。这种机制就是对相关的方法使用关键字的冲突。这种机制就是对相关的方法使用关键字synchron

9、ized。为了协调和同步线程对共享数据的操作,为了协调和同步线程对共享数据的操作,java.lang.Object类中提供了类中提供了wait()方法和方法和notify()方法,实现方法,实现线程的同步,这两个方法始终在循环中使用。不带参数的线程的同步,这两个方法始终在循环中使用。不带参数的wait()方法将一直等待,单位为毫秒,到达参数指定的时间后,线方法将一直等待,单位为毫秒,到达参数指定的时间后,线程又成为就绪状态;如果没有到达指定的时间,则需要其他程又成为就绪状态;如果没有到达指定的时间,则需要其他线程调用线程调用notify()方法将其唤醒。方法将其唤醒。使用使用wait()方法和

10、方法和notify()方法,同时配合条件检查可以有方法,同时配合条件检查可以有效控制多线程之间的运行顺序,实现多线程之间的同步。效控制多线程之间的运行顺序,实现多线程之间的同步。目录目录10.3 案例实施案例实施1 编写源代码编写源代码2 编译源代码编译源代码3 运行程序运行程序在命令提示符后输入语句:在命令提示符后输入语句:java Time,程序运行结果如图所示程序运行结果如图所示打开命令提示符窗口,将命令提示符的当打开命令提示符窗口,将命令提示符的当前路径切换到前路径切换到Java源程序文件所在的目录,源程序文件所在的目录,然后输入然后输入 javac Time.java命令,按命令,按

11、Enter键完成对键完成对Time.java的编译。的编译。编写编写Time.java文件文件目录目录10.3 案例实施案例实施目录目录10.4 训练与实战训练与实战10.4.1 生产者与消费者同步生产者与消费者同步训练内内容容编写生产者类、消费者类及共享资源类,然后用主类来测试同步问题。编写生产者类、消费者类及共享资源类,然后用主类来测试同步问题。训练过程程 1.编写源代码编写源代码 编写编写ProducerConsumer.java文件文件。2.编译和运行程序编译和运行程序 在命令提示符后输入下面的语句即可运行程序:在命令提示符后输入下面的语句即可运行程序:java ProducerCon

12、sumer目录目录10.4.1 生产者与消费者同步生产者与消费者同步目录目录10.4.1 生产者与消费者同步生产者与消费者同步总结与与体体会会产品在生产和消费的过程中必须保证产品数据更新的同步,也就是说产品在生产和消费的过程中必须保证产品数据更新的同步,也就是说当生产一个产品之后,生产者和消费者的产品(当生产一个产品之后,生产者和消费者的产品(Shares)的数量都)的数量都要增加要增加1,这样才能保证数据的一致性。在共享资源类,这样才能保证数据的一致性。在共享资源类Shares的的get()和和put()方法中添加了方法中添加了synchronized关键字,并且通过关键字,并且通过wait

13、()方法和方法和notify()方法,实现了线程的同步。方法,实现了线程的同步。目录目录10.4.2 ATM机的存款与取款问题机的存款与取款问题训练内内容容 这是一个银行的存取款线程。假设一个有这是一个银行的存取款线程。假设一个有20名员工的公司,该公司名员工的公司,该公司在银行设立了一个公共账号,每一个员工都可以在任何时间存钱和在银行设立了一个公共账号,每一个员工都可以在任何时间存钱和取钱。取钱。训练过程程 1.编写源代码编写源代码 编写编写SGMoney.java文件文件。2.编译和运行程序编译和运行程序 在命令提示符窗口下,将路径切换到在命令提示符窗口下,将路径切换到Java源程序文件所

14、在的目录下,源程序文件所在的目录下,然后输入然后输入javac SGMoney.java语句并按语句并按Enter键:键:编译完成后,输入编译完成后,输入java SGMoney语句并按语句并按Enter键。键。目录目录10.4.2 ATM机的存款与取款问题机的存款与取款问题目录目录10.4.2 ATM机的存款与取款问题机的存款与取款问题总结与与体体会会 在这个练习中通过在这个练习中通过synchronized关键字锁定对象,保证在同一时间关键字锁定对象,保证在同一时间内只有一个线程可以获得这个对象。任何时候只要一个获得共享资内只有一个线程可以获得这个对象。任何时候只要一个获得共享资源对象的线

15、程在运行,那么其他线程在获得共享资源对象前都处于源对象的线程在运行,那么其他线程在获得共享资源对象前都处于等待状态,一直到共享资源对象被释放之后,才可以使用。等待状态,一直到共享资源对象被释放之后,才可以使用。目录目录10.5 实际工作中常见问题解析实际工作中常见问题解析问题问题分析分析与与解解决决 出现这种问题是因为没有主出现这种问题是因为没有主程序,虽然有了解决问题的线程序,虽然有了解决问题的线程,但是没有主程序把线程联程,但是没有主程序把线程联系到一起。因此编写一个系到一起。因此编写一个main()函数的主程序就可以了。另函数的主程序就可以了。另外,还要注意多线程同时访问外,还要注意多线程同时访问全局变量的问题。全局变量的问题。各个线程类都编译运行成各个线程类都编译运行成功了,但是不出现运行结果或功了,但是不出现运行结果或者提示找不到主方法,这是什者提示找不到主方法,这是什么原因造成的?么原因造成的?目录目录

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

当前位置:首页 > 教育专区 > 高中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com