13-Java多线程编程实例讲解

上传人:飞****9 文档编号:131856394 上传时间:2020-05-10 格式:PPT 页数:16 大小:1.07MB
返回 下载 相关 举报
13-Java多线程编程实例讲解_第1页
第1页 / 共16页
13-Java多线程编程实例讲解_第2页
第2页 / 共16页
13-Java多线程编程实例讲解_第3页
第3页 / 共16页
13-Java多线程编程实例讲解_第4页
第4页 / 共16页
13-Java多线程编程实例讲解_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《13-Java多线程编程实例讲解》由会员分享,可在线阅读,更多相关《13-Java多线程编程实例讲解(16页珍藏版)》请在金锄头文库上搜索。

1、 Java程序设计 重庆交大 10 56 13 Java多线程编程实例讲解 13 1多线程应用实例 计算素数13 2多线程应用实例 计数程序13 3课后作业 10 56 13 1多线程应用实例 计算素数 本节给出一个用Java语言编写的比较经典的多线程应用程序 2 P122 该Java程序实现的功能是 计算并输出第N个素数 N值可能很大 比如10000 可同时计算若干个素数 比如同时计算并输出第10000 10001 10002个素数 本程序采用多线程技术实现 由于N值很大时 计算第N个素数的计算量还是比较大 特别地 要求可以同时计算若干个素数 这样把计算并输出第N个素数的功能用线程实现 如果

2、要同时计算若干个素数 则计算每个素数单独开启一个线程 计算素数的功能用PrimeFinder类实现 程序清单 chapter13 PrimeFinder java 10 56 13 1多线程应用实例 计算素数 本实例采用第2种方式 实现runnable接口创建线程类 来创建并启动线程 packagechapter13 publicclassPrimeFinderimplementsRunnable publiclongtarget 成员变量 第N个素数当中的N值publiclongprime 就是所找到的第N个素数publicbooleanfinished false 标志着当前线程是否结束p

3、rivateThreadrunner 就是当前创建并启动的线程对象 构造方法 参数inTarget 接收到的需要查找的第N个素数当中的N值 注意 这个N值要以构造函数参数的形式传进来 且通常要定义相应的实例变量PrimeFinder longinTarget target inTarget if runner null runner newThread this runner start publicvoidrun 线程的执行体longnumPrimes 0 计数 当前找到的是第几个素数longcandidate 2 candidate 每一个候选的素数while numPrimes targ

4、et 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实现类的构造函数中实现的 10 56 13 1多线程应用实例 计算素数 以下PrimeThread

5、s类是使用PrimeFinder类的应用程序 程序清单 chapter13 PrimeThreads java 应用程序PrimeThreads可以同时查找多个素数 用户可通过命令行参数指定要查找哪几个素数 要在NetBeans中设置命令行参数 详见文档 Java相关开发工具经验汇总 doc 10 56 13 1多线程应用实例 计算素数 packagechapter13 publicclassPrimeThreads publicstaticvoidmain String arguments PrimeThreadspt newPrimeThreads arguments 构造函数 从参数数组

6、中读取每个整数并为每个整数创建并启动一个线程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 print

7、ln 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 find

8、er target is finder prime 10 56 13 1多线程应用实例 计算素数 使用命令行参数 100001000110002 运行该程序 其输出可能为 Lookingforprime10000Lookingforprime10001Lookingforprime10002Prime10000is104729Prime10001is104743Prime10002is104759 10 56 13 1多线程应用实例 计算素数 线程结束的顺序是不确定的 特别是上述三个线程所花费的时间很接近 因此输出也可能为 Lookingforprime10000Lookingforprime

9、10001Lookingforprime10002Prime10002is104759Prime10000is104729Prime10001is104743以上输出表明 寻找第10002个素数的线程比寻找第10000个素数的线程先结束 10 56 13 2多线程应用实例 计数程序13 2 1未使用多线程技术的计数程序 程序清单 chapter13 Counter java 以上程序的运行界面如下图所示 当单击 Start 按钮时 程序调用addCounter方法 并在文本框中开始计数 从0到99 每次计数后调用Thread类的静态方法sleep使得当前线程暂停50毫秒 此方法的调用并不会新建

10、线程 而是暂停当前线程的活动 10 56 13 2多线程应用实例 计数程序13 2 1未使用多线程技术的计数程序 如果希望在计数过程中停止程序运行 似乎单击 Close 按钮就可以停止计数并关闭窗口 但是 实际上却发现 Close 按钮的单击 似乎 不起作用 计数依然在继续 当计数到99 没有单击 Close 按钮 程序却退出了 原因何在呢 这是因为该程序是单线程运行的 一旦某个任务启动了 必须要等到这个任务完成才能进行其他任务的执行 因此当计数开始后 程序不会对其他操作有所反应 而是必须执行完100次循环 然后才能响应 Close 按钮的单击操作 关闭程序 10 56 13 2多线程应用实例

11、 计数程序13 2 1未使用多线程技术的计数程序 可以看出 上面的单线程程序缺乏交互性 如果希望在计数的同时 程序也能响应其他操作 这需要通过线程机制来实现 在线程机制中 CPU可以为每个线程都分配自己的一部分时间 每个线程都 感觉 自己好像拥有整个CPU 但CPU的计算时间实际却是在所有线程间分摊的 10 56 13 2多线程应用实例 计数程序13 2 2实现一个计数线程的计数程序 实现线程的前提是对程序子任务的划分 对于上面的例子 现在把计数程序分为两个线程 一个用于计数 一个用于事件调度 即主线程 程序清单 chapter13 test1 CounterThread java 以上程序的

12、运行界面如下图所示 10 56 13 2多线程应用实例 计数程序13 2 2实现一个计数线程的计数程序 从上面的程序可以看出 创建线程的方法很简单 将需要独立运行的子任务代码放到从Thread类派生类的run方法中 然后在主线程中原先调用该子任务的地方先创建一个该线程类的实例 再调用线程类的start方法启动线程 新线程只能由start方法启动 然后才能执行run方法 现在 在计数过程中 当单击 Close 按钮后 程序立刻会退出 和我们所设想的一样 10 56 13 2多线程应用实例 计数程序13 2 3实现多个计数线程的计数程序 更深入一步 我们希望把 Start 按钮换成 Add 按钮

13、每次点击 Add 按钮 增加一个文本框 同时在文本框中启动一个新的计数 这需要创建多个线程 程序清单 chapter13 test2 CounterMultiThread java 10 56 13 2多线程应用实例 计数程序13 2 3实现多个计数线程的计数程序 以上程序的运行界面如下图所示 每次单击 Add 按钮 在窗口上新增一个文本框 该程序最多允许添加16个文本框 每个文本框都执行自己的计数功能 10 56 13 3课后作业 自由落下和水平抛出的小球 编写一个JavaGUI应用程序 采用Java多线程技术 模拟自由落体和平抛运动 一个球自由落下 另一个球水平抛出 自由落体物理公式 h g t2 2 平抛运动物理公式 h g t2 2 x 26 t

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

当前位置:首页 > IT计算机/网络 > 其它相关文档

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