gpt4 book ai didi

java - 平台.runLater

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

我有一个连接到套接字连接的应用程序,并且该连接向我发送了很多信息..可以说每秒 300 个订单(也许更多)..我有一个类(它就像一个监听器,对某个事件(并且该事件具有顺序)接收该顺序。创建一个对象,然后将其添加到 ObservableList(这是 tableView 的源)。这样我的 GUI 就会显示该顺序。但问题来了,如果该订单已经存在于 observableList 上..我无法添加它..并且我必须更新它(我确实这样做)..但有时..对于某些订单,此条件不起作用并且订单再次添加。

我将向您展示它是如何使用一些代码工作的。

 public class ReceivedOrderListener 
{
ev = Event; //Supose that this is the event with the order
if(!Repository.ordersIdMap.containsKey(ev.orderID))
{

Platform.runLater(new Runnable()
{
@Override public void run()
{
Repository.ordersCollection.add(ev.orderVo);
}
}
});
Repository.ordersIdMap.put(ev.orderID, ev.orderVo);
}

现在好了..这是我的代码的简历。 ev 是我的事件,包含订单的所有信息,orderID 是我用来查看订单是否已存在的 key (是的,是唯一的)。 “Repository”是一个单例类,“ordersCollection”是一个 ObservableList,“ordersIdMap”是一个 HashMap

最佳答案

如果 ReceivedOrderListener 由多个线程执行,则它看起来像“先检查后执行”竞争条件。

-> ORDER1 comes to the listener
T1 checks ordersIdMap.containsKey(ORDER1) it returs false
T1 proceeds to do Platform.runLater to add the order
-> ORDER1 comes to the listener again
-> T2 checks ordersIdMap.containsKey(ORDER1) it returs false again
now T1 proceeds to do ordersIdMap.put(ORDER1)
-> T2 proceeds to do Platform.runLater to add the order again

关于java - 平台.runLater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18642044/

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