资源简介
JAVA管程解决哲学家问题,直观的的,多线程
代码片段和文件信息
import java.awt.GridLayout;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class Monitor{
public int philStates[]=new int[5]; //0=thinking1=hungry2=eating
public boolean chopsticks[]=new boolean[5]; //true=usefalse=free
public deadlock dp; //used to change the icon
public Monitor(deadlock dp){
this.dp=dp;
int i;
for(i=0;i<5;i++){
philStates[i]=0;
chopsticks[i]=false;
}
}
public synchronized void pickupL(int i){
while(chopsticks[i]){
try{wait();}catch(InterruptedException e){}
}
chopsticks[i]=true;
philStates[i]=1;
dp.jl[i].setIcon(dp.pic[philStates[i]]);
dp.jl[i].setText(“I am hungry..“);
}
public synchronized void pickupR(int i){
while(chopsticks[(i+1)%5]){
try{wait();}catch(InterruptedException e){}
}
chopsticks[(i+1)%5]=true;
philStates[i]=2;
dp.jl[i].setIcon(dp.pic[philStates[i]]);
dp.jl[i].setText(“eating now..“);
}
public synchronized void putdown(int i){
chopsticks[i]=false;
chopsticks[(i+1)%5]=false;
philStates[i]=0;
dp.jl[i].setIcon(dp.pic[philStates[i]]);
dp.jl[i].setText(“thinking...“);
notify();
}
}
public class deadlock extends Jframe{
/*for conveniencethe member varables are declared public*/
public JLabel jl[]=new JLabel[5];
public String[] name={“philosopher1““philosopher2““philosopher3““philosopher4““philosopher5“};
public ImageIcon pic[]=new ImageIcon[3];
public Monitor m;
public philosopher phil[];
public deadlock(){
super(“Diner Philosopher Homework“);
/*init the image resource*/
pic[0]=new ImageIcon(getClass().getResource(“images/think.jpg“));
pic[1]=new ImageIcon(getClass().getResource(“images/hungry.jpg“));
pic[2]=new ImageIcon(getClass().getResource(“images/eat.jpg“));
/*init the philosophers status*/
for(int i=0;i<5;i++){
jl[i]=new JLabel(name[i]pic[0]JLabel.CENTER);
jl[i].setVerticalTextPosition(JLabel.BOTTOM);
jl[i].setHorizontalTextPosition(JLabel.CENTER);
}
/*init the window size and location*/
setSize(600 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
m=new Monitor(this);
phil=new philosopher[5];
for(int i=0;i<5;i++)phil[i]=new philosopher(im);
/*add some menus*/
MenuBar mb=new MenuBar();
Menu menu1=new Menu(“Start/Stop“);
MenuItem mi1=new MenuItem(“Stop“);
mi1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i=0;i<5;i++)deadlock.this.phil[i].interrupt();
}
});
MenuItem mi2=new MenuItem(“Start“);
mi2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i=0;i<5;i++)deadlock.this.phil[i].start();
}
});
MenuItem mi3=new MenuItem(“Exit“);
mi3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
menu1.add(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-12-01 14:55 philosopher\
文件 915372 2011-12-01 14:52 philosopher\philosopher.pdf
目录 0 2011-12-01 17:47 philosopher\src\
文件 4536 2011-11-29 19:04 philosopher\src\deadlock.java
文件 635 2011-12-01 17:47 philosopher\src\DinersPhilosopher$1.class
文件 631 2011-12-01 17:47 philosopher\src\DinersPhilosopher$2.class
文件 556 2011-12-01 17:47 philosopher\src\DinersPhilosopher$3.class
文件 695 2011-12-01 17:47 philosopher\src\DinersPhilosopher$4.class
文件 3005 2011-12-01 17:47 philosopher\src\DinersPhilosopher.class
文件 4355 2011-11-29 19:04 philosopher\src\DinersPhilosopher.java
目录 0 2011-11-29 19:04 philosopher\src\images\
文件 2317 2011-11-29 19:04 philosopher\src\images\desktop.jpg
文件 12584 2011-11-29 19:04 philosopher\src\images\eat.jpg
文件 12871 2011-11-29 19:04 philosopher\src\images\hungry.jpg
文件 13396 2011-11-29 19:04 philosopher\src\images\think.jpg
文件 1214 2011-12-01 17:47 philosopher\src\Monitor.class
文件 652 2011-12-01 17:47 philosopher\src\philosopher.class
- 上一篇:android游戏开发,连连看源码
- 下一篇:个人通讯录管理系统源码
相关资源
- android游戏开发,连连看源码
- java基于socket编写的聊天室程序
- Java重启式随机游走代码(Random Walk
- java 程序换头像
- 东北大学高级java期末试题
- java小游戏 大炮打小鸟
- JAVA生成订单号(日期+流水号)
- java发邮件代码和说明,附mailapi.jar和
- java指纹识别-图片识别技术
- 运用java图形界面编写的学生信息管理
- Dijkstra迪杰斯特拉算法JAVA
- Java实现推箱子游戏
- JAVA三大框架思维导图
- Java数据结构和算法中文第二版——书
- JNI Java本地接口规范官方中文版
- JSP+JavaBean+MySQL实现登陆及增删改查
- java jsp mysql mvc 完整版,带图片
- Java核心技术 卷2 第10版 中文版
- 21 内部窗体java绝对新手
- 中国象棋对弈系统_java课程设计
- Java 2实用教程,第五版 。课后习题
- java生成二维码80134
- 教材管理系统+java+数据库+包含所有表
- JAVA计算器(含有优先级的判定)
- Java 源码:计算某个目录下的所有文件
- java 源码-电梯模拟器-灵活自定义-完美
- Java画图板课程设计报告只有报告没有
- java写的一个流星雨小程序
- java 科学型计算器 代码
- 记事本打印和页面设置功能Java实现
评论
共有 条评论