一起:
public class MyApple {
private static int apple = 9;
public static void main(String[] args) {
Thread monkeyOne = new Thread(() -> {
while(apple >= 2){
synchronized (MyApple.class){
if(apple >= 2){
apple -= 2;
System.out.println("A猴子拿了2个,还剩" + apple + "个");
}
try {
Thread.sleep(100);
}catch (Exception e){
e.printStackTrace();
}
}
}
});
Thread monkeyTwo = new Thread(new Runnable() {
@Override
public void run() {
while(apple >= 3){
synchronized (MyApple.class){
if(apple >= 3){
apple -= 3;
System.out.println("B猴子拿了3个,还剩" + apple + "个");
}
try {
Thread.sleep(100);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
});
monkeyOne.start();
monkeyTwo.start();
}
}
交替:
public class MyApple2 {
private static int apple = 90;
public static void main(String[] args) {
Thread monkeyOne = new Thread(() -> {
try {
while(apple >= 2) {
synchronized (MyApple2.class){
if(apple >= 2){
apple -= 2;
System.out.println("A猴子拿了2个,还剩" + apple + "个");
}
MyApple2.class.notify();
if (apple < 2) break;
MyApple2.class.wait();
}
}
}catch (Exception e){
e.printStackTrace();
}
});
Thread monkeyTwo = new Thread(() -> {
try {
while(apple >= 3) {
synchronized (MyApple2.class){
if(apple >= 3){
apple -= 3;
System.out.println("B猴子拿了3个,还剩" + apple + "个");
}
MyApple2.class.notify();
if(apple < 3) break;
MyApple2.class.wait();
}
}
}catch (Exception e){
e.printStackTrace();
}
});
monkeyOne.start();
monkeyTwo.start();
}
}