您的位置:首页 > 编程语言 > Java开发

java多线程哲学家思考吃饭问题

2015-03-05 00:03 387 查看
package test;

import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test{
static Scanner sc = new Scanner(System.in);
static String line;

static class chopsticks{
boolean ishold = false;
public synchronized void take(){
while(ishold){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ishold = true;
}

synchronized void drop(){
ishold = false;
notifyAll();
}
}

static class thinker extends Thread{
static int id = 0;
int mid = id++;
chopsticks left;
chopsticks right;
public thinker(chopsticks l,chopsticks r) {
left = l;
right = r;
}

@Override
public void run() {
while(!interrupted()){
System.out.println("哲学家"+mid+"思考");
left.take();
right.take();
System.out.println("哲学家"+mid+"吃饭");
left.drop();
right.drop();
}
}
}

public static void main(String[] args) {
chopsticks[] cs = new chopsticks[10];
for(int i=0;i<10;i++){
cs[i] = new chopsticks();
}

for(int i=0;i<10;i++){
new thinker(cs[i], cs[(i+1)%10]).start();;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: