package com.ywu.demo.normal.juc;
import java.util.concurrent.Exchanger;
/**
* @description
* @author wuya
* @date 2019/12/12
*/
public class ExchangerDemo {
public static void main(String[] args) {
Exchanger<Drink> exchanger = new Exchanger<>();
Drink cola = new Cola();
Drink coffee = new Coffee();
Thread xm = new Thread(() -> {
cola.drink(300);
try {
Drink exchange = exchanger.exchange(cola);
exchange.drink(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
xm.setName("小明");
Thread xf = new Thread(() -> {
coffee.drink(400);
try {
Drink exchange = exchanger.exchange(coffee);
exchange.drink(400);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
xf.setName("小明的女朋友小芳");
xm.start();
xf.start();
}
interface Drink {
void drink(int ml);
String desc();
}
static class Cola implements Drink {
private int remainMl = 1000;
@Override
public void drink(int ml) {
if (ml > remainMl) {
System.out.println(desc() + "不够那么多啦,少喝一点," + Thread.currentThread().getName() + "把剩下的全喝完了");
}
remainMl = 800 - ml;
System.out.println(Thread.currentThread().getName() + "喝了" + ml + "ml" + desc());
}
@Override
public String desc() {
return "可乐";
}
}
static class Coffee implements Drink {
private int remainMl = 500;
@Override
public void drink(int ml) {
if (ml > remainMl) {
System.out.println(desc() + "不够那么多啦,少喝一点," + Thread.currentThread().getName() + "把剩下的全喝完了");
}
remainMl = 800 - ml;
System.out.println(Thread.currentThread().getName() + "喝了" + ml + "ml" + desc());
}
@Override
public String desc() {
return "咖啡";
}
}
}
JUC中Exchanger使用示例
最新推荐文章于 2022-12-02 10:27:52 发布