首页 Java语言在进程管理教学中的应用

Java语言在进程管理教学中的应用

举报
开通vip

Java语言在进程管理教学中的应用 &nbsh1;   Java语言在进程管理教学中的应用     邵奇峰 :1672-5913(2009)02-0111-03 摘 要:传统操作系统课程以伪语言描述进程管理算法有诸多不足,本文提出了将Java语言应用于进程管理教学的具体方案,论述了Java语言描述进程概念与算法的详细实现,且针对经典同步问题给出了Java语言并发包的高级API实现。 Key:进程;线程;Jav...

Java语言在进程管理教学中的应用

&nbsh1;

 

Java语言在进程管理教学中的应用

 

 

邵奇峰

:1672-5913(2009)02-0111-03

摘 要:传统操作系统课程以伪语言描述进程管理算法有诸多不足,本文提出了将Java语言应用于进程管理教学的具体 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,论述了Java语言描述进程概念与算法的详细实现,且针对经典同步问题给出了Java语言并发包的高级API实现。

Key:进程;线程;Java;同步

:G642

:B

1 引言

操作系统是计算机科学专业的核心课程,其中的进程管理部分不但是操作系统课程的重点,而且是其难点中的难点,很多学生直到研究生毕业仍没真正理解其实质。当前硬件多核时代已经来临,以往并发程序设计只出现在服务器应用中,如今连客户机应用也对并发程序设计提出了迫切的需求,因此就要求学生对作为并发程序设计基础的进程管理,不但要深刻掌握其核心理论,而且能熟练应用于实践之中。目前多数操作系统教材采用伪语言描述进程管理的相关算法,学生只能被动的阅读和分析,不能直观的察看运行结果、监控运行过程和修改调试代码,这就限制了学生对理论的深入理解和技术的实践应用。现代操作系统都以多线程进程的形式提供并发,Java语言的并发API对多线程程序设计提供了由低级到高级的完整API支持,笔者在教学中采用Java语言描述进程管理的概念与算法,不但使学生深入浅出的掌握了核心理论,而且使学生能立即将其应用于实践之中,收到了显著的效果。

2 Java语言描述进程基本概念

2.1 线程的异步性

线程的异步性是由于多个线程异步的并发修改同一数据引起的。以下代码创建了100个线程,每个线程异步的向account对象中增加1分钱,运行该程序会发现最终结果并非100,而且每次运行结果都不相同。通过该程序可使学生直观的观察到线程异步性的问题,教师可在此基础上提出竞争条件和临界区等基本概念,然后引入同步机制解决该代码的异步问题,如此学生可深刻意识到操作系统理论解决实际问题的重要性,产生对后续理论深入学习的兴趣。

import java.util.concurrent.*;

public class AccountWithoutSync {

private static Account account = new Account();

public static void main(String[] args) {

ExecutorService executor = Executors. newCachedThreadPool();

// Create and launch 100 threads

for (int i = 0; i < 100; i++) {

executor.execute(new AddAPennyTask()); }

executor.shutdown();

// Wait until all tasks are finished

while (!executor.isTerminated()) { }

System.out.println("What is balance? " + account.getBalance()); }

// A thread for adding a penny to the account

private static class AddAPennyTask implements Runnable {

public void run() {

account.deposit(1); } }

// An inner class for account

private static class Account {

private int balance = 0;

public int getBalance() {

return balance; }

public void deposit(int amount) {

int newBalance = balance + amount;

// This delay is deliberately added to magnify the data-corruption problem and

// make it easy to see.

try {

Thread.sleep(5); }

catch (InterruptedException ex) { }

balance = newBalance; } } }

2.2 信号量

信号量(Semaphore)由Edsger Dijkstra于60年代提出,其主要用于限制访问共享资源的线程数目[1],Java语言中的Semaphore类即是信号量概念的具体实现,其用法如下:

Semaphore sem = new Semaphore(n);

try{

sem.acquire(); //P操作

//critical section

}catch(InterruptedException ie){ }

finally{

sem.release(); //V操作

}

//remainder section

教师可在介绍其内部实现原理后,让学生用二元信号量(binary semaphore)解决2.1中的代码异步问题,立即将理论应用于实践,以加深对理论的理解。

2.3 管程

管程(Monitor)是由Brinch Hansen和Tony Hoare于70年代提出的一种高级同步原语[2],寻常系统中已很少看到具体实现,以至许多学生甚至教师认为其仅是理想化的概念,所以通过伪语言很难向学生阐明其便利性和高效性。其实Java语言提供的synchronized同步锁即为管程的实现,Java语言的每个对象都有一个隐含锁(Lock)和一个内置条件变量(Condition),如图1所示,等待获取对象锁的线程都在该对象的进入队列(entry set)中,因条件变量阻塞的线程都在该条件所对应的队列(wait set)中。

本文档为【Java语言在进程管理教学中的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
资教之佳
暂无简介~
格式:doc
大小:45KB
软件:Word
页数:13
分类:互联网
上传时间:2023-11-27
浏览量:0