《2022年操作系统-实验》由会员分享,可在线阅读,更多相关《2022年操作系统-实验(7页珍藏版)》请在金锄头文库上搜索。
1、南京工程学院上机实 验 报 告课程 名 称:操作系统实验项目名称:基于线程的编程技术学生班级:数字媒体 143 学生学号:202140703 学生姓名:汲静指导教师:彭焕峰实验 时 间:2016.10.11 实验 地 点:信息楼专业机房实验成绩评定:2016-2017-1 学期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 1 一、实验目的及要求熟悉基于多线程的编程技术,编程实现简单的多线程编程实例。要求采用 Java 等某一种
2、编程语言实现2 个多线程编程实例。二、实验相关知识简介线程是近年来操作系统领域出现的一个非常重要的机制和技术,其重要程度不亚于进程。线程机制可以提高程序执行的效率,而且也方便用户编程,不但适用于多机系统,对大多数单 CPU 的个人计算机也同样带来好处,因此当代操作系统都支持线程。在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大。传统的进程不能很好的利用多处理器,因为一个进程在某个时刻只能使用一个处理器,进程间通信的效率受到限制。引入线程的目的:减小(进程/线程)上下文切换开销;更好支持多处理器,达到最大程度的并行;简化进程间
3、的通信。三、关键程序代码分析(一) 程序 1 1. 问题描述答:启动3 个线程打印递增的数字, 线程 1 先打印1,2,3,4,5, 然后是线程2 打印6,7,8,9,10, 然后是线程 3 打印 11,12,13,14,15. 接着再由线程1打印 16,17,18,19,20.以此类推 , 直到打印到30 2. 关键代码分析答:package lalala; publicclass NumberPrintDemo / n为即将打印的数字privatestaticintn = 1; / state=1表示将由线程1 打印数字 , state=2表示将由线程2 打印数字 , state=3表示将
4、由线程3 打印数字privatestaticintstate = 1; publicstaticvoid main(String args) final NumberPrintDemo pn = new NumberPrintDemo(); new Thread(new Runnable() publicvoid run() / 3个线程打印75 个数字 , 单个线程每次打印5 个连续数字 , 因此每个线程只需执行5 次打印任务 . 3*5*5=75 for ( int i = 0; i 2; i+) / 3个线程都使用pn 对象做锁 , 以保证每个交替期间只有一个线程在打印synchroni
5、zed (pn) / 如果 state!=1, 说明此时尚未轮到线程1 打印 , 线程 1 将调用pn 的 wait()方法 , 直到下次被唤醒名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 上机实验报告2 while ( state != 1) try pn.wait(); catch (InterruptedException e) e.printStackTrace(); / 当 state=1时, 轮到线程1 打印 5
6、次数字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 个线程将再次竞争pn 锁/ 假如线程1 或线程 3 竞争到资源 , 由于 state不为
7、1 或 3, 线程 1 或线程 3 将很快再次wait, 释放出刚到手的pn 锁. / 只有线程2 可以通过state判定 , 所以线程2 一定是执行下次打印任务的线程. / 对于线程2 来说 , 获得锁的道路也许是曲折的, 但前途一定是光明的 . pn.notifyAll(); , 线程 1 ).start(); new Thread(new Runnable() publicvoid run() for ( int i = 0; i 5; i+) synchronized (pn) while ( state != 2) try pn.wait(); catch (InterruptedE
8、xception e) e.printStackTrace(); for ( int j = 0; j 5; j+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 上机实验报告3 System.out .println(Thread.currentThread().getName()+ : + n+); System.out .println(); state = 3; pn.notifyAll(); , 线程 2 ).sta
9、rt(); new Thread(new Runnable() publicvoid 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 =100) System.out .println(name+, 已经到达终点! ); / 结束赛跑 ,breakbreak ; publicstaticvoid main(String args) G
10、uiTuSaiPao wugui=new GuiTuSaiPao( 乌龟 ); GuiTuSaiPao tuzi=new GuiTuSaiPao( 兔子 ); Thread thread=new Thread(wugui); Thread thread2=new Thread(tuzi); / 启动线程 thread.start(); thread2.start(); 四、运行结果说明:2 个程序的运行截图,并对执行结果进行解释。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页
11、,共 7 页 - - - - - - - - - 上机实验报告5 进程 1:进程 2:五、体会与提高重点说明对多线程编程的理解。多线程编程技术是Java 语言的重要特点。 多线程编程的含义是将程序任务分成几个并行的子任务。 特别是在网络编程中,很多功能是可以并发执行的。比如网络传输速度较慢、用户输入速度较慢,可以用两个独立的线程去完成这两个功能,而不影响正常的显示或其它功能。简而言之,就是多个进程同时进行来提高效率。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 上机实验报告6 教师评语:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -