首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

开饭的哲学家(线程死锁例子)

2013-02-24 
吃饭的哲学家(线程死锁例子)}}package tianya.cn.philopherf

吃饭的哲学家(线程死锁例子)

}

}

===========================================

package tianya.cn.philopherfood;

?

import java.util.Random;

?

public class Philosopher extends Thread {

private static Random random = new Random();

private static int count = 0;

?

private int number = count++;

?

private Chopstick leftChopstick;

private Chopstick rightChopstick;

?

public static int ponder = 0;//package access,time of philosopher thinking

?

public Philosopher(Chopstick left, Chopstick right){

leftChopstick = left;

rightChopstick = right;

start();

}

?

public void thinking(){

System.out.println();

?

if(ponder > 0){

?

try {

sleep(random.nextInt(ponder));

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

?

public void eat(){

synchronized (leftChopstick) {

System.out.println(this + " has " + this.leftChopstick + " waitting for " + this.rightChopstick);

}

?

synchronized (rightChopstick) {

System.out.println(this + "eating");

}

}

?

?

public String toString(){

return "Philospher" + number;

}

?

public void run(){

while(true){

thinking();

eat();

}

}

}

?

==========================================================

package tianya.cn.main;

?

import java.util.Timer;

import java.util.TimerTask;

?

import tianya.cn.philopherfood.Chopstick;

import tianya.cn.philopherfood.Philosopher;

?

public class DiningPhilosophers {

?

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

?

if( args.length < 3){

System.err.println("输入参数错误!。。。。。。。");

System.exit(0);

}

?

Philosopher[] philosopher = new Philosopher[ Integer.parseInt(args[0]) ];

?

Philosopher.ponder = Integer.parseInt( args[1] );

?

Chopstick

left = new Chopstick(),

right = new Chopstick(),

first = left;

?

int i = 0;

if(i < philosopher.length - 1){

philosopher[i++] = ?new Philosopher(left, right);

left = right;

right = ?new Chopstick();

}

?

if(args[2].equals("deadlock")){

?

philosopher[i] = new Philosopher(left, first);

}else{

//swaping values prevents deadblock

philosopher[i] = new Philosopher(first, left);

}

?

//

if(args.length > 3){

int delay = ?Integer.parseInt( args[3] );

new Timer().schedule(new TimerTask() {

?

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("OVER!!!");

System.exit(0);

}

}, delay);

}

?

}

?

}

?

热点排行