如何使用Flux和Mono将这种“旧式”过程Java代码转换为至少Java 8流或响应流。 我的目标是为在并发非阻塞Web环境中使用该代码奠定良好的基础。
我希望整个系统中有固定数量的Elem
个元素,同时要为这些元素提供更多或更少的places
。
从视觉上看,它看起来像是8个元素,12个地方和3个对象(其中每个对象都有自己的Elem
s列表):
s1 [Elem(1), Elem(2), Elem(3), Elem(4)]
s2 [Elem(5), Elem(6), Elem(7), Elem(8)]
s3 [FREE, FREE, FREE, FREE]
呼吁s1 requestElem()
要求s1 requestElem()
要求s2 requestElem()
s1 [Elem(1), Elem(2), FREE, FREE]
s2 [Elem(5), Elem(6), Elem(7), FREE]
s3 [FREE, FREE, FREE, FREE]
...目前,这三个元素正等待以随机顺序返回...
呼吁s3 returnElem(4)
要求s3 returnElem(8)
要求s3 returnElem(2)
s1 [Elem(1), Elem(2), FREE, FREE]
s2 [Elem(5), Elem(6), Elem(7), FREE]
s3 [Elem(4), Elem(8), Elem(3), FREE]
这些操作的顺序当然可能有所不同,并且是随机选择的。
class MyClass {
private String name;
private final int size = 4; // size of s1, s2, s3
private BlockingDeque<Elem> places;
private int numOfElem;
private BlockingDeque<Elem> additionalElems;
public void requestElem() {
if (numOfElem > size) {
numOfElem--;
additionalElems.pop();
return;
}
if(!places.isEmpty()){
places.pop();
numOfElem = places.size();
} else {
System.out.println("empty: " + name + ", waiting for new elements...");
}
}
public void returnElem(int id) {
if (numOfElem >= size) {
numOfElem++;
additionalElems.push(new Elem(id));
return;
}
if(places.size() < size){
places.push(new Elem(id));
numOfBicycles = places.size();
}
}
}
这可能吗?您可以提供一些有用的提示或资源给我吗?