gpt4 book ai didi

java - 通过观察者从线程使用列表中仅获取最新元素

转载 作者:行者123 更新时间:2023-12-01 05:14:30 26 4
gpt4 key购买 nike

这个问题与我遇到的问题有关 my current implemention 。因此我想知道是否有一种方法可以完全不同地实现它。

我有一个java.util.concurrent 列表,它由多个线程更新。 列表本身实现了Observable,然后我还有另外两个观察者,他们会在列表更改时收到通知。

现在,观察者应仅加载最新值(他们还没有),而不是列表可能包含的所有数千个值。

目前的概述是这样的:

public class Observer1 implements Observable {
}

public class Observer2 implements Observable {
}

public class MyList<T> extends Observable {
private SomeJavaConcurrentList list; // (which one depends on your answer)

public synchronized void addElement(T element) {
list.put(element); // or list.add(element); depending on list above
setChanged();
notifyObservers();
}
}

public class MyThread implements Runnable {
public void run() {
MyList list = MyList.getInstance();
list.add("new element from thread " + this.getName());
}
}

如何确保每个观察者只获取尚未见过的条目?

可能出现的问题:

  • 我可以以某种方式删除上面的同步吗?当需要等待所有通知进程时,它可能会减慢程序速度?但是 notifyObservers() 可能会被多次调用。
  • 我不确定观察者被调用时是否都具有相同的状态。一个人可能会说:“哦,我现在不更新自己,但下一轮我会更新所有内容。返回”,另一个人会立即下载更改。因此他们有不同的文件。
  • 有多个观察者,因此我无法从列表中删除现有元素(例如 LinkedBlockingQueue.take())

最佳答案

我有两个建议:1. 每个观察者都会有一个成员,用于保存加载到观察者的最后一个索引的索引,并且在通知观察者的代码中,您将返回在索引之后添加的元素。2.如果你有大量的观察者而不是添加,也许你应该使用readwritelock而不是synchronize。

关于java - 通过观察者从线程使用列表中仅获取最新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com