首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Platform.runLater

Platform.runLater
EN

Stack Overflow用户
提问于 2013-09-06 01:02:12
回答 1查看 1.2K关注 0票数 0

我有一个连接到套接字连接的应用程序,这些连接给我发送了很多信息。假设每秒300个订单(可能更多)..我有一个类(它就像一个侦听器,它对某个事件做出反应,该事件具有该顺序),它接收该顺序。创建一个对象,然后将其添加到ObservableList (tableView的源)。这样,我的GUI就会显示该顺序。但问题来了,如果observableList上已经存在该顺序。我无法添加它,我必须更新它( ..and I do)..但有时..。对于某些订单,这个条件不起作用,订单被重新添加。

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

代码语言:javascript
复制
 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是我用来查看订单是否已经存在的关键(是的,是唯一的)。Repository是单例类,ordersCollection是ObservableList,ordersIdMap是HashMap

EN

回答 1

Stack Overflow用户

发布于 2013-09-06 02:00:42

如果ReceivedOrderListener是由多个线程执行的,那么它看起来就像是“检查然后执行”的竞争条件。

代码语言:javascript
复制
-> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18642044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档