操作系统实验1_第1页
操作系统实验1_第2页
操作系统实验1_第3页
操作系统实验1_第4页
操作系统实验1_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、南京工程学院上机实 验 报 告 课 程 名 称: 操作系统 实验项目名称: 基于线程的编程技术 学生班级: 数字媒体143 学生学号: 202140703 学生姓名: 汲静 指导教师: 彭焕峰 实 验 时 间: 2016.10.11 实 验 地 点: 信息楼专业机房 实验成绩评定: 2016-2017-1学期一、实验目的及要求熟悉基于多线程的编程技术,编程实现简单的多线程编程实例。要求采用java等某一种编程语言实现2个多线程编程实例。二、实验相关知识简介线程是近年来操作系统领域出现的一个非常重要的机制和技术,其重要程度不亚于进程。线程机制可以提高程序执行的效率,而且也方便用户编程,不但适用于

2、多机系统,对大多数单cpu的个人计算机也同样带来好处,因此当代操作系统都支持线程。在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大。传统的进程不能很好的利用多处理器,因为一个进程在某个时刻只能使用一个处理器,进程间通信的效率受到限制。引入线程的目的:减小(进程/线程)上下文切换开销;更好支持多处理器,达到最大程度的并行;简化进程间的通信。 三、关键程序代码分析(一) 程序11. 问题描述答:启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13

3、,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 pn = new num

4、berprintdemo(); 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(); catch (interr

5、uptedexception 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和线程3, 同时线程1将退出同步代码块, 释放pn锁. / 因此3个线程将

6、再次竞争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+) synchronized (pn) while (state != 2) try pn.wait();

7、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 runnable() public void run() for (int i = 0; i 5; i+) synchronized (pn) while (st

8、ate != 3) try pn.wait(); catch (interruptedexception e) e.printstacktrace(); for (int j = 0; j =100) system.out.println(name+,已经到达终点!); /结束赛跑,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:五、体会与提高 重点说明对多线程编程的理解。 多线程编程技术是java语言的重

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论