




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上机实验报告南京工程学院上机实 验 报 告 课 程 名 称: 操作系统 实验项目名称: 基于线程的编程技术 学生班级: 数字媒体143 学生学号: 202140703 学生姓名: 汲静 指导教师: 彭焕峰 实 验 时 间: 2016.10.11 实 验 地 点: 信息楼专业机房 实验成绩评定: 2016-2017-1学期1- 3 -一、实验目的及要求熟悉基于多线程的编程技术,编程实现简单的多线程编程实例。要求采用Java等某一种编程语言实现2个多线程编程实例。二、实验相关知识简介线程是近年来操作系统领域出现的一个非常重要的机制和技术,其重要程度不亚于进程。线程机制可以提高程序执行的效率,而且也
2、方便用户编程,不但适用于多机系统,对大多数单CPU的个人计算机也同样带来好处,因此当代操作系统都支持线程。在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大。传统的进程不能很好的利用多处理器,因为一个进程在某个时刻只能使用一个处理器,进程间通信的效率受到限制。引入线程的目的:减小(进程/线程)上下文切换开销;更好支持多处理器,达到最大程度的并行;简化进程间的通信。 三、关键程序代码分析(一) 程序11. 问题描述答:启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线
3、程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20.以此类推, 直到打印到302. 关键代码分析答:package lalala;public class NumberPrintDemo / n为即将打印的数字 private static int n = 1; / state=1表示将由线程1打印数字, state=2表示将由线程2打印数字, state=3表示将由线程3打印数字 private static int state = 1; public static void main(String args) final NumberPrintDemo
4、pn = new NumberPrintDemo(); new Thread(new Runnable() public void run() / 3个线程打印75个数字, 单个线程每次打印5个连续数字, 因此每个线程只需执行5次打印任务. 3*5*5=75 for (int i = 0; i < 2; i+) / 3个线程都使用pn对象做锁, 以保证每个交替期间只有一个线程在打印 synchronized (pn) / 如果state!=1, 说明此时尚未轮到线程1打印, 线程1将调用pn的wait()方法, 直到下次被唤醒 while (state != 1) try pn.wait
5、(); catch (InterruptedException e) e.printStackTrace(); / 当state=1时, 轮到线程1打印5次数字 for (int j = 0; j < 5; j+) / 打印一次后n自增 System.out.println(Thread.currentThread().getName() + ": " + n+); System.out.println(); / 线程1打印完成后, 将state赋值为2, 表示接下来将轮到线程2打印 state = 2; / notifyAll()方法唤醒在pn上wait的线程2和线
6、程3, 同时线程1将退出同步代码块, 释放pn锁. / 因此3个线程将再次竞争pn锁 / 假如线程1或线程3竞争到资源, 由于state不为1或3, 线程1或线程3将很快再次wait, 释放出刚到手的pn锁. / 只有线程2可以通过state判定, 所以线程2一定是执行下次打印任务的线程. / 对于线程2来说, 获得锁的道路也许是曲折的, 但前途一定是光明的. pn.notifyAll(); , "线程1").start(); new Thread(new Runnable() public void run() for (int i = 0; i < 5; i+)
7、synchronized (pn) while (state != 2) try pn.wait(); catch (InterruptedException e) e.printStackTrace(); for (int j = 0; j < 5; j+) System.out.println(Thread.currentThread().getName()+ ": " + n+); System.out.println(); state = 3; pn.notifyAll(); , "线程2").start(); new Thread(new
8、 Runnable() public void run() for (int i = 0; i < 5; i+) synchronized (pn) while (state != 3) try pn.wait(); catch (InterruptedException e) e.printStackTrace(); for (int j = 0; j < 5; j+) System.out.println(Thread.currentThread().getName()+": "+ n+); System.out.println(); state = 1;
9、pn.notifyAll(); , "线程3").start(); (二)龟兔赛跑(例如:读者-写者问题)1. 问题描述答:创建两个线程,实现龟兔赛跑,线程每次执行休眠500毫秒,两个线程每次分别执行乌龟前行10米与兔子前行10米。一方先到100米处结束程序,显示获胜信息。2. 关键代码分析 package competition public class GuiTuSaiPao implements Runnable private String name; private int length=0; public GuiTuSaiPao() public GuiTuSa
10、iPao(String name) =name; public void run() while(true) /每次停500毫秒 try Thread.sleep(500); catch (InterruptedException e) e.printStackTrace(); /向前跑十米 length+=10; System.out.println(name+"已跑了"+length+"米."); /到达终点 if(length>=100) System.out.println(name+",已经到达终点!"
11、;); /结束赛跑,break break; public static void main(String args) GuiTuSaiPao wugui=new GuiTuSaiPao("乌龟"); GuiTuSaiPao tuzi=new GuiTuSaiPao("兔子"); Thread thread=new Thread(wugui); Thread thread2=new Thread(tuzi); /启动线程 thread.start(); thread2.start(); 4、 运行结果说明:2个程序的运行截图,并对执行结果进行解释。进程1: 进程2:五
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健身器材行业产业链协同发展模式创新案例分析实践总结考核试卷
- 爆炸物仓储安全管理的最佳实践考核试卷
- 箱包品牌KOL营销策略考核试卷
- 环境安全与生态文明建设考核试卷
- 游乐场所设备品牌建设与市场推广考核试卷
- 石油开采业的竞争策略与市场定位考核试卷
- 环境监测与重金属污染防治考核试卷
- 2025年新法规:劳动合同不应仅作为企业管理的保护伞还需强化合同条款规范
- 资产管理考试试题及答案
- A2满分考试试题及答案
- 2025至2030中国射频芯片市场趋势展望及需求前景研究报告
- 《词汇构建法:课件中的词根词缀解析》
- 应急急救知识课件
- 文综中考试卷及答案解析
- 鼠伤寒沙门菌护理查房
- 2024年江苏省南京市中考物理试卷真题(含答案)
- K30自动生成及计算试验记录
- (完整)教育心理学-各章节重点学习笔记
- 建筑行业施工期间意外伤害免责协议
- 民兵国防知识教育教案
- 毒理学研究新技术应用-深度研究
评论
0/150
提交评论