昆明理工大学信息工程与自动化学院学生实验报告
( 2011 —2012 学年 第 1 学期 )
课程名称:java程序设计 开课实验室:信自楼机房445 2011 年12月 12日 年级、专业、班 计科093 实验项目名称 教师评学号 0 发牌程序 A.了解□ A.强 □ A.达到□ A.规范□ A.详细□ 姓名 孙浩川 成绩 指导教师 周兰江 B.基本了解□ B.中等 □ B.基本达到□ B.基本规范□ B.一般 □ C.不了解□ C.差 □ C.未达到□ C.不规范□ C.没有 □ 该同学是否了解实验原理: 该同学的实验能力: 该同学的实验是否达到要求: 实验报告是否规范: 实验过程是否详细记录: 语 教师签名: 年 月 日 一、上机目的及内容
发牌程序。
二、实验原理及基本技术路线图(方框原理图或程序流程图)
1.本程序使用【例题7.9】修改而成。
2.以前给四个人发牌,现在修改为给三个人发牌。
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC及eclipse软件
四、实验方法、步骤(或:程序代码或操作过程) //【例7.9】 发牌程序。
import java.util.*; import java.awt.*; import javax.swing.*;
public class CardBuffer //加互斥锁的缓冲区 {
private int value;
private boolean isEmpty=true; //value是否空的信号量 private int order=0; //信号量,约定取牌线程的次序
synchronized void put(int i) {
while (!isEmpty) //当value不空时,等待 try {
this.wait(); // }
catch(InterruptedException e) {}
value=i; //值
isEmpty=false; // notifyAll(); // }
synchronized int get(int order) //order序 {
while (isEmpty || (this.order!=order)) //时等待
try {
this.wait(); }
catch(InterruptedException e) {}
isEmpty=true; //
2
等待 当value空时,value获得设置value为不空状态 唤醒所有其他等待线程 是取牌线程约定的次当value空或取牌次序不符设置value为空状态,并返
回值
notifyAll();
this.order=(this.order+1)%3; //加1使取牌次序轮转 return value; } } /*
class Sender extends Thread //发牌线程类 {
private CardBuffer cardbuffer;
private int count; //牌数
public Sender(CardBuffer cardbuffer,int count) {
this.cardbuffer=cardbuffer; this.count=count; }
public void run() {
for (int i=1; i<=this.count; i++) cardbuffer.put(i); } }*/
class Receiver extends Thread //取牌线程类 {
private CardBuffer cardbuffer; private JTextArea text;
private int order; //信号量,约定取牌线程的次序
public Receiver(CardBuffer cardbuffer,JTextArea text,int order) {
this.cardbuffer = cardbuffer ; this.text = text ; this.order = order; }
-3-