java实现golang类似的chan
class ChanMessage<T> {
private String type;
private T data;
public ChanMessage(String type, T data) {
this.type = type;
this.data = data;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
public class Chan<T extends ChanMessage> {
private T message;
private boolean empty = true;
public synchronized T take() {
while (empty) {
try {
wait();
} catch (InterruptedException e) {
}
}
empty = true;
notifyAll();
return message;
}
public synchronized void put(T message) {
while (!empty) {
try {
wait();
} catch (InterruptedException e) {
}
}
empty = false;
this.message = message;
notifyAll();
}
public static void main(String[] args) {
Chan<ChanMessage<Integer>> chanMessageChan = new Chan<>();
new Thread(() -> {
chanMessageChan.put(new ChanMessage<>("timeout", new Integer(1)));
}).start();
new Thread(() -> {
ChanMessage<Integer> chanMessage = chanMessageChan.take();
switch (chanMessage.getType()) {
case "timeout":
System.out.println(chanMessage.getData());
break;
default:
break;
}
}).start();
}
}