解决方案 »
- socket给服务端发送范围超过127的数据
- 程序点X无法关闭,是Eclipse的问题还是JDK的问题...
- 关于JAVA.NIO中selector
- java如何判断两大整数是否互质,希望有高效点的方法
- GUI画图问题
- 请问一个方法需要一个java.util.Date类型的参数,请问我如何将当前时间传进去?
- 请各位高手推荐一个Java的编辑器吧!
- 取得系统日期插入表的问题,请指教
- 比较一下:JAVA和C#
- JDK115中无包javax.media.*
- 为什么不是先运行System.out.println("beetle constructor");而是先运行了Beetle b = new Beetle();
- 一个正则问题
如果(筷子数量=1){
用手抓着吃
}否则 如果(筷子数量=2){
用筷子夹着吃
}else{
用手抓着吃
}
int index = 0;
while(面条还有){
index ++;
if(index>3) index = 1;
if(index == 1) 农民1.吃();
else if(index == 2) 农民2.吃();
else if(index == 3) 农民3.吃();
面条--;
}农民.吃面(){
拿左右两只筷子;
用筷子吃面;
}
public class EatingNoodles { //实例化三个工人
Worker a = new Worker("A" ,1) ;
Worker b = new Worker("B" ,1) ;
Worker c = new Worker("C" ,1) ;
public void start(){ //三个工人吃面条的线程
EatingThread et1 = new EatingThread(a , b) ;
EatingThread et2 = new EatingThread(b , c) ;
EatingThread et3 = new EatingThread(c , a) ; et1.start() ;
et2.start() ;
et3.start() ; //初始化,首先b将1支筷子交给a ,并通知a可以开始吃面条了
synchronized (a) {
b.giveKz(a , 1);
a.notify() ;
} }
public static void main(String[] args) { new EatingNoodles().start() ;
}
class EatingThread extends Thread{ Worker worker ;
Worker next ; //排在当前工人的下一个人 public EatingThread(Worker worker , Worker next){
this.worker = worker ;
this.next = next ;
} @Override
public void run() {
synchronized (worker) {
while(true){
if(worker.kzCount >= 2){ //至少有两根筷子就吃面条
worker.eat() ;
worker.giveKz(next ,2) ; //两只筷子都给下一个人
synchronized (next) {
next.notify(); //通知下一个人可以吃面条了
}
}else{ //否则就等待
try {
worker.wait() ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
} } /*
* 工人
* */
class Worker{ String name ; int kzCount ; //筷子数量 public Worker(String name , int kzCount){
this.name = name ;
this.kzCount = kzCount ;
} public void eat(){
System.out.println(name + "吃面条...");
try {
Thread.sleep(1000); //睡眠1s,来表示吃面条的过程
} catch (InterruptedException e) {
e.printStackTrace();
}
} /*交出筷子*/
public void giveKz(Worker to , int count){
this.kzCount -= count ;
to.kzCount += count ;
System.out.printf("%s交出%d支筷子给%s, 【目前%s有%d支筷子 ,%s有%d支筷子 ,%s有%d支筷子】\n" ,
this.name , count , to.name ,
a.name , a.kzCount ,
b.name , b.kzCount ,
c.name , c.kzCount);
} }
}B交出1支筷子给A, 【目前A有2支筷子 ,B有0支筷子 ,C有1支筷子】
A吃面条...
A交出2支筷子给B, 【目前A有0支筷子 ,B有2支筷子 ,C有1支筷子】
B吃面条...
B交出2支筷子给C, 【目前A有0支筷子 ,B有0支筷子 ,C有3支筷子】
C吃面条...
C交出2支筷子给A, 【目前A有2支筷子 ,B有0支筷子 ,C有1支筷子】
A吃面条...
A交出2支筷子给B, 【目前A有0支筷子 ,B有2支筷子 ,C有1支筷子】
B吃面条...
B交出2支筷子给C, 【目前A有0支筷子 ,B有0支筷子 ,C有3支筷子】
C吃面条...
C交出2支筷子给A, 【目前A有2支筷子 ,B有0支筷子 ,C有1支筷子】
A吃面条...
A交出2支筷子给B, 【目前A有0支筷子 ,B有2支筷子 ,C有1支筷子】
B吃面条...
B交出2支筷子给C, 【目前A有0支筷子 ,B有0支筷子 ,C有3支筷子】
C吃面条...
C交出2支筷子给A, 【目前A有2支筷子 ,B有0支筷子 ,C有1支筷子】
A吃面条...
A交出2支筷子给B, 【目前A有0支筷子 ,B有2支筷子 ,C有1支筷子】
B吃面条...
B交出2支筷子给C, 【目前A有0支筷子 ,B有0支筷子 ,C有3支筷子】
C吃面条...
C交出2支筷子给A, 【目前A有2支筷子 ,B有0支筷子 ,C有1支筷子】
A吃面条...
A交出2支筷子给B, 【目前A有0支筷子 ,B有2支筷子 ,C有1支筷子】
B吃面条...
B交出2支筷子给C, 【目前A有0支筷子 ,B有0支筷子 ,C有3支筷子】
C吃面条...
C交出2支筷子给A, 【目前A有2支筷子 ,B有0支筷子 ,C有1支筷子】
A吃面条...
A交出2支筷子给B, 【目前A有0支筷子 ,B有2支筷子 ,C有1支筷子】
B吃面条...
B交出2支筷子给C, 【目前A有0支筷子 ,B有0支筷子 ,C有3支筷子】
C吃面条...