Java程序设计实例教程-第8章.ppt

上传人:max****ui 文档编号:6361723 上传时间:2020-02-23 格式:PPT 页数:29 大小:945.50KB
返回 下载 相关 举报
Java程序设计实例教程-第8章.ppt_第1页
第1页 / 共29页
Java程序设计实例教程-第8章.ppt_第2页
第2页 / 共29页
Java程序设计实例教程-第8章.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
第8章多线程 本次课程内容 认识多线程线程概念创建多线程线程的 一生 线程的优先级线程的同步 1 认识多线程 当我们使用电脑时 可以一边听音乐 一边QQ聊天 一边打游戏 一个CPU怎么可以同时作这么多事情呢 难道电脑真的可以同时运行多个程序 真的吗 在同一时间点执行各项进程 编译程序发送 接收邮件打印文件其他 操作系统允许计算机同时执行多项操作 程序 进程 publicclassmainClass publicstaticvoidmain Stringagrs m1 publicstaticvoidm1 m2 m3 publicstaticvoidm2 publicstaticvoidm3 单线程 双线程 2 线程概念 程序 进程与多任务程序 program 是对数据描述与操作的代码的集合 是应用程序执行的脚本 进程 process 是程序的一次执行过程 是系统运行程序的基本单位 程序是静态的 进程是动态的 系统运行一个程序即是一个进程从创建 运行到消亡的过程 多任务 multitask 在一个系统中可以同时运行多个程序 即有多个独立运行的任务 每个任务对应一个进程 线程线程 thread 就是比进程更小的运行单位 是程序中单个顺序的流控制 一个进程中可以包含多个线程 简单来讲 线程是一个独立的执行流 是进程内部的一个独立执行单元 相当于一个子程序 3 创建多线程 JDK提供的相关类和接口 1 Runnable接口 就提供一个方法run 2 Thread类 实现了Runnable接口创建线程的两种方法 创建Thread类的子类 重写该类的run方法创建Runnable接口的实现类 实现接口中的run方法 方法一 创建Thread的子类 创建Thread的子类创建线程对象启动线程start 方法可以启动线程 开始执行run 中代码 即 run 内代码 不是调用执行 而是启动后 由虚拟机自动执行的 classMyThreadextendsThread publicvoidrun for inti 1 i 30 i System out println 线程 getName 正在打印 i publicstaticvoidmain String args System out println main开始执行 MyThreadmt newMyThread MyThreadmt2 newMyThread mt start mt2 start for inti 1 i 30 i System out println 线程main正在打印 i 线程练习一 管道流 PipedOuputStream PipeInputStream 方法一 PipedInputStreamin newPipedInputStream PipedOutputStreamout newPipedOutputStream in 方法二 PipedInputStreamin newPipedInputStream PipedOutputStreamout newPipedOutputStream In connect out out connect in 问题 要定义的线程类已经显式继承了一个其他的类怎么办 方法二 创建Runnable接口的实现类 创建类实现接口classclassnameimplementsRunnable voidrun 创建该类对象 不是线程对象 还要借助Thread类 Thread 该类对象 启动线程start classMyRunnableimplementsRunnable publicvoidrun for inti 1 i 30 i System out println 线程 Thread currentThread getName 正在打印 i publicstaticvoidmain String args System out println main开始执行 MyRunnablemr newMyRunnable Threadt newThread mr t start for inti 1 i 30 i System out println 线程main正在打印 i run不可以调用 start启动线程 JVM自动执行run classMyRunnableimplementsRunnable publicvoidrun for inti 1 i 30 i System out println 线程 Thread currentThread getName 正在打印 i publicstaticvoidmain String args System out println main开始执行 MyRunnablemr newMyRunnable Threadt newThread mr t run for inti 1 i 30 i System out println 线程main正在打印 i 4 线程的 一生 线程的 一生 有几个阶段 1 创建 线程对象生成 2 就绪 start 启动 等待运行 3 运行 CPU运行run 代码 4 阻塞 运行过程中因为某种原因 让出CPU 5 死亡 运行完毕 线程结束 或抛出异常退出 造成 阻塞 的原因 1 yield 主动出让CPU 2 sleep 累了 休息一下 3 join 合并线程 暂停 4 I O操作 进行数据输出 暂停代码运行结束阻塞 1 休眠结束 2 join 执行完 3 输入 出操作执行完 4 调用Interrupt 打断休眠 Thread类提供了获取和设置线程优先级的方法getPriority 获取当前线程的优先级setPriority 设置当前线程的优先级Java语言为线程类设置了10个优先级 分别使用1 10内的整数表示 整数值越大代表优先级越高 每个线程都有一个默认的优先级 主线程的默认优先级是5 Thread类定义的三个常量分别代表了几个常用的优先级 MAX PRIORITY 代表了最高优先级10MIN PRIORITY 代表了最低优先级1NORM PRIORITY 代表了正常优先级5 5 线程的优先级 classMyThreadextendsThread publicvoidrun for inti 1 i 30 i System out println 线程 Thread currentThread getName 正在打印 i classThreadTest publicstaticvoidmain String args System out println Thread currentThread getPriority MyThreadmt1 newMyThread MyThreadmt2 newMyThread MyThreadmt3 newMyThread mt1 setPriority MIN PRIORITY mt3 setPriority MAX PRIORITY mt1 start mt2 start mt3 start 线程间 共享 数据产生的问题实例 银行的一个账户 Bankbank newBank 0001 2000 两张卡 线程 Operation 1 bank 1200 start Operation 2 bank 1200 start 6 线程的同步 0001 2000 产生这种问题的原因是对共享资源访问的不完整 为了解决这种问题 需要寻找一种机制来保证对共享数据操作的完整性 这种完整性称为共享数据操作的同步 在Java语言中 引入了 对象互斥锁 的概念 对象互斥锁 阻止多个线程同时访问同一个变量 在Java语言中 对象互斥锁 的实现 用关键字synchronized来声明一个操作共享数据的方法或一段代码 Java对象锁 用synchronized来标识的代码段或方法即为 对象互斥锁 锁住的部分 如果一个程序内有两个或以上的方法使用synchronized标志 则它们在同一个 对象互斥锁 管理之下 使用 synchronized 关键字 1修饰方法被 synchronized 关键字修饰的方法称为 同步方法 当一个线程访问对象的同步方法时 被访问对象就处于 锁定 状态 访问该方法的其他线程只能等待 对象中的其他同步方法也不能访问 但非同步方法则可以访问 使用 synchronized 关键字 2修饰部分代码如果只希望同步部分代码行 可以使用 同步块 同步块的作用与同步方法一样 只是控制范围有所区别 在多线程应用程序中 obj代表被锁定的共享对象
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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