added ex J
This commit is contained in:
parent
b3a0d1f7a1
commit
a1bfa6021a
33
src/exercises/ex_j/Diner.java
Normal file
33
src/exercises/ex_j/Diner.java
Normal file
@ -0,0 +1,33 @@
|
||||
package exercises.ex_j;
|
||||
|
||||
class Diner {
|
||||
private String name;
|
||||
private boolean isHungry;
|
||||
|
||||
public Diner(String name) {
|
||||
this.name = name;
|
||||
isHungry = true;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public boolean isHungry() {
|
||||
return isHungry;
|
||||
}
|
||||
|
||||
public void eatWith(Spoon spoon, Diner spouse) {
|
||||
while (isHungry) {
|
||||
if (spoon.getOwner() == this) {
|
||||
if (spouse.isHungry()) {
|
||||
System.out.println(getName() + ": You eat first my darling " + spouse.getName() + "!");
|
||||
spoon.setOwner(spouse);
|
||||
} else {
|
||||
spoon.use();
|
||||
this.isHungry = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
20
src/exercises/ex_j/LivelockDinner.java
Normal file
20
src/exercises/ex_j/LivelockDinner.java
Normal file
@ -0,0 +1,20 @@
|
||||
package exercises.ex_j;
|
||||
|
||||
public class LivelockDinner {
|
||||
public static void main(String[] args) {
|
||||
final Diner husband = new Diner("Bob");
|
||||
final Diner wife = new Diner("Alice");
|
||||
final Spoon spoon = new Spoon(husband);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
public void run() {
|
||||
husband.eatWith(spoon, wife);
|
||||
}
|
||||
}).start();
|
||||
new Thread(new Runnable() {
|
||||
public void run() {
|
||||
wife.eatWith(spoon, husband);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
21
src/exercises/ex_j/Spoon.java
Normal file
21
src/exercises/ex_j/Spoon.java
Normal file
@ -0,0 +1,21 @@
|
||||
package exercises.ex_j;
|
||||
|
||||
class Spoon {
|
||||
private Diner owner;
|
||||
|
||||
public synchronized Diner getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public Spoon(Diner d) {
|
||||
owner = d;
|
||||
}
|
||||
|
||||
public synchronized void setOwner(Diner d) {
|
||||
owner = d;
|
||||
}
|
||||
|
||||
public synchronized void use() {
|
||||
System.out.printf("%s has eaten!", owner.getName());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user