昆明理工大学 java 试验报告 发牌程序 下载本文

昆明理工大学信息工程与自动化学院学生实验报告

( 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-