我发现ConcurrentHashMap已经在Java 8中被完全重写为更"无锁".我浏览了该get()方法的代码,发现没有明确的锁机制:
public V get(Object key) {
Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;
int h = spread(key.hashCode());
if ((tab = table) != null && (n = tab.length) > 0 &&
(e = tabAt(tab, (n - 1) & h)) != null) {
if ((eh = e.hash) == h) {
if ((ek = e.key) == key || (ek != null && key.equals(ek)))
return e.val;
}
else if (eh < 0)
return (p = e.find(h, key)) != …Run Code Online (Sandbox Code Playgroud) 我在 Java 中看到了反应式流概念,它倾向于标准化 javaRX 和 Spring 反应式概念。一切都很好,除了以下事实:为了对流进行一些转换,您需要实现一个或多个处理器。我的问题是关于扩展订阅者、发布者的处理器接口处理器的需求
似乎您在进行转换时传递了一个乐趣,并将其耦合到生产者和订阅者,就是这样!但出现了一些问题:
您可以在这里看到一个基本示例:https://www.concretepage.com/java/java-9/java-reactive-streams。在处理器方法 onNext 中,您可以看到处理器请求 1 个元素,这让我很困扰:订阅者端的背压怎么样?如果订阅者批量请求一次 100 个元素怎么办?处理器难道不应该只关注处理方面而不应该要求元素吗?
@Override
public void onNext(Article item) {
subscription.request(1);
submit(function.apply(item));
}
Run Code Online (Sandbox Code Playgroud)
谢谢 !