




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计 重庆交大 02 54 13 Java多线程编程实例讲解 13 1多线程应用实例 计算素数13 2多线程应用实例 计数程序13 3课后作业 02 54 13 1多线程应用实例 计算素数 本节给出一个用Java语言编写的比较经典的多线程应用程序 2 P122 该Java程序实现的功能是 计算并输出第N个素数 N值可能很大 比如10000 可同时计算若干个素数 比如同时计算并输出第10000 10001 10002个素数 本程序采用多线程技术实现 由于N值很大时 计算第N个素数的计算量还是比较大 特别地 要求可以同时计算若干个素数 这样把计算并输出第N个素数的功能用线程实现 如果要同时计算若干个素数 则计算每个素数单独开启一个线程 计算素数的功能用PrimeFinder类实现 程序清单 chapter13 PrimeFinder java 02 54 13 1多线程应用实例 计算素数 本实例采用第2种方式 实现runnable接口创建线程类 来创建并启动线程 packagechapter13 publicclassPrimeFinderimplementsRunnable publiclongtarget 成员变量 第N个素数当中的N值publiclongprime 就是所找到的第N个素数publicbooleanfinished false 标志着当前线程是否结束privateThreadrunner 就是当前创建并启动的线程对象 构造方法 参数inTarget 接收到的需要查找的第N个素数当中的N值 注意 这个N值要以构造函数参数的形式传进来 且通常要定义相应的实例变量PrimeFinder longinTarget target inTarget if runner null runner newThread this runner start publicvoidrun 线程的执行体longnumPrimes 0 计数 当前找到的是第几个素数longcandidate 2 candidate 每一个候选的素数while numPrimes target if isPrime candidate numPrimes prime candidate candidate finished true booleanisPrime longcheckNumber 判断checkNumber是否为素数doubleroot Math sqrt checkNumber for inti 2 i root i if checkNumber i 0 returnfalse returntrue 注意 与第12章例子不同的时 线程的创建及启动是在Runnable实现类的构造函数中实现的 02 54 13 1多线程应用实例 计算素数 以下PrimeThreads类是使用PrimeFinder类的应用程序 程序清单 chapter13 PrimeThreads java 应用程序PrimeThreads可以同时查找多个素数 用户可通过命令行参数指定要查找哪几个素数 要在NetBeans中设置命令行参数 详见文档 Java相关开发工具经验汇总 doc 02 54 13 1多线程应用实例 计算素数 packagechapter13 publicclassPrimeThreads publicstaticvoidmain String arguments PrimeThreadspt newPrimeThreads arguments 构造函数 从参数数组中读取每个整数并为每个整数创建并启动一个线程publicPrimeThreads String arguments PrimeFinder finder newPrimeFinder arguments length for inti 0 i arguments length i try longcount Long parseLong arguments i finder i newPrimeFinder count System out println Lookingforprime count catch NumberFormatExceptionnfe System out println Error nfe getMessage booleancomplete false 判断开启的每个线程是否结束while complete complete true for intj 0 j finder length j if finder j null continue if finder j finished complete false else displayResult finder j finder j null 输出找到的素数privatevoiddisplayResult PrimeFinderfinder System out println Prime finder target is finder prime 02 54 13 1多线程应用实例 计算素数 使用命令行参数 100001000110002 运行该程序 其输出可能为 Lookingforprime10000Lookingforprime10001Lookingforprime10002Prime10000is104729Prime10001is104743Prime10002is104759 02 54 13 1多线程应用实例 计算素数 线程结束的顺序是不确定的 特别是上述三个线程所花费的时间很接近 因此输出也可能为 Lookingforprime10000Lookingforprime10001Lookingforprime10002Prime10002is104759Prime10000is104729Prime10001is104743以上输出表明 寻找第10002个素数的线程比寻找第10000个素数的线程先结束 02 54 13 2多线程应用实例 计数程序13 2 1未使用多线程技术的计数程序 程序清单 chapter13 Counter java 以上程序的运行界面如下图所示 当单击 Start 按钮时 程序调用addCounter方法 并在文本框中开始计数 从0到99 每次计数后调用Thread类的静态方法sleep使得当前线程暂停50毫秒 此方法的调用并不会新建线程 而是暂停当前线程的活动 02 54 13 2多线程应用实例 计数程序13 2 1未使用多线程技术的计数程序 如果希望在计数过程中停止程序运行 似乎单击 Close 按钮就可以停止计数并关闭窗口 但是 实际上却发现 Close 按钮的单击 似乎 不起作用 计数依然在继续 当计数到99 没有单击 Close 按钮 程序却退出了 原因何在呢 这是因为该程序是单线程运行的 一旦某个任务启动了 必须要等到这个任务完成才能进行其他任务的执行 因此当计数开始后 程序不会对其他操作有所反应 而是必须执行完100次循环 然后才能响应 Close 按钮的单击操作 关闭程序 02 54 13 2多线程应用实例 计数程序13 2 1未使用多线程技术的计数程序 可以看出 上面的单线程程序缺乏交互性 如果希望在计数的同时 程序也能响应其他操作 这需要通过线程机制来实现 在线程机制中 CPU可以为每个线程都分配自己的一部分时间 每个线程都 感觉 自己好像拥有整个CPU 但CPU的计算时间实际却是在所有线程间分摊的 02 54 13 2多线程应用实例 计数程序13 2 2实现一个计数线程的计数程序 实现线程的前提是对程序子任务的划分 对于上面的例子 现在把计数程序分为两个线程 一个用于计数 一个用于事件调度 即主线程 程序清单 chapter13 test1 CounterThread java 以上程序的运行界面如下图所示 02 54 13 2多线程应用实例 计数程序13 2 2实现一个计数线程的计数程序 从上面的程序可以看出 创建线程的方法很简单 将需要独立运行的子任务代码放到从Thread类派生类的run方法中 然后在主线程中原先调用该子任务的地方先创建一个该线程类的实例 再调用线程类的start方法启动线程 新线程只能由start方法启动 然后才能执行run方法 现在 在计数过程中 当单击 Close 按钮后 程序立刻会退出 和我们所设想的一样 02 54 13 2多线程应用实例 计数程序13 2 3实现多个计数线程的计数程序 更深入一步 我们希望把 Start 按钮换成 Add 按钮 每次点击 Add 按钮 增加一个文本框 同时在文本框中启动一个新的计数 这需要创建多个线程 程序清单 chapter13 test2 CounterMultiThread java 02 54 13 2多线程应用实例 计数程序13 2 3实现多个计数线程的计数程序 以上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目管理培训课件
- 科学绘本课件
- 线上摄影培训课件下载
- 环保行动倡议:环境保护意识的培养与实践行动推广教案综合
- 成本控制报表模板包含成本核算与控制步骤
- 锁骨骨折的护理教学
- 2025城市供用气合同4篇
- 药剂相关知识培训简报课件
- 口腔护理的目的
- 委托储运配送培训课件
- 2025陕西寰宇正信科技产业发展有限公司招聘(71人)笔试参考题库附答案解析
- 2025年秋季开学第一课《翻越你的浪浪山》课件
- 2025年浙江省中考科学试题卷(含答案解析)
- DB11∕T 510-2024 公共建筑节能工程施工质量验收规程
- 人教版初中九年级全册英语单词表(完整版)
- GJB标准化大纲
- 钢筋混凝土排水管二级管配筋设计图册
- 同济大学复变函数复变函数与积分变换课件
- 东北地区近百年降水时间序列变化规律的小波分析_姜晓艳_图文
- 初识Ps基础上手指南PPT课件
- 教导处行事历
评论
0/150
提交评论