我通过修改可观察数组列表来更新表,但现在2个线程可能会修改可观察数组列表。是否应该将修改列表的代码放入同步方法中,还是只允许1个线程修改列表?在JavaFX中,observableArrayList线程是否安全?
回答
号,执行的ObservableList
仅仅是在正常List
(普通Java集合)添加听者中方法的包装
所以它不是线程安全的,你可以去看看的ObservableListWrapper
的源代码。
的更多信息:https://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm
你可以通过调用
javafx.collectionsFXCollections.synchronizedObservableList(observableList)
这为您的observableList您可以使用将项目添加到您的列表的包装创建从ObservableList同步ObservableList。
问题是什么同步对你意味着什么。由于技术同步并不一定意味着它在业务需求方面是同步的,例如,如果必须通过在列表上连续调用add(...)两次添加2个项目,并确保它们按顺序包含(中间没有其他项目)。也许你必须确保不同级别的同步。
对于这个特殊用例 - 其中ObservableList
绑定到TableView
,您只能从FX应用程序线程访问列表。这是因为对列表的更改将导致对TableView
和all changes to the scene graph must occur on the FX Application Thread的更改。
因此,在这种情况下,ObservableList
是否是线程安全的问题是一个有争议的问题:由于您只能因为其他原因从单个线程访问它,因此您并不需要它。
如果您有需要更新列表中的后台线程,您可以通过使用javafx.concurrent
API安排这些更新是在呼叫包装他们Platform.runLater(...)
,或在FX应用程序线程发生(这可能是最好)管理你的线程。
谢谢你阻止我犯大错!我需要使用像这样的私人任务createTableLoaderTask(){ 任务<收藏
您的'onSucceeded'处理程序可以简化为'event - > jobData.addAll(tableLoader.getValue())',但是,看起来是正确的。 –
格式化效果不佳!我实际上是通过修改后台线程中的列表来修改视图,而不是仅仅检索后台线程中的数据,然后通过调用setOnSucceeded方法更新UI线程上的列表 – user2312688
- 1. 是否Box.add()线程安全?
- 2. 是否mysql_insert_id线程安全?
- 3. NashornScriptEngine是否线程安全?
- 4. RegExp.MatchString是否线程安全?
- 5. SeekableStream是否线程安全?
- 6. 是否log4j线程安全?
- 7. NSPasteboard是否线程安全?
- 8. LIBSVM是否安全线程
- 9. epoll是否线程安全?
- 10. 是否NotifyPropertyChanged线程安全?
- 11. 线程是否表示线程安全?
- 12. 部分线程安全是否使Java类线程安全?
- 13. 存储在线程安全集合线程中的对象是否安全?
- 14. Android中的java.util.Observable是否线程安全?
- 15. MyBatis中的selectKey线程是否安全?
- 16. AutoMapper中的Mapper.Map是否线程安全?
- 17. 是System.ServiceModel.Channels.BufferManager是否线程安全?
- 18. Android FragmentTransaction.replace()是否是线程安全的?
- 19. 是否是setlocale线程安全函数?
- 20. 进程线程是否安全?
- 21. 如何使JavaFX的线程安全Platform.runLater
- 22. 以下代码是否线程安全
- 23. 检查是否为空线程安全?
- 24. C#委托是否线程安全?
- 25. Spring TransactionTemplate和SimpleJdbcTemplate是否线程安全?
- 26. Trove库是否线程安全?
- 27. Ruby类方法是否线程安全?
- 28. mersenne twister线程是否安全cpp
- 29. 是否dequeueAll上mutable.SynchronizedQueue线程安全?
- 30. .NET模块是否线程安全?
如果修改你的'ObservableList'改变你的'TableView',那么你只能从FX Apllication Thread访问它。 –
http://stackoverflow.com/questions/23344042/modifying-fxcollections-synchronizedobservablelist-out-of-the-ui-thread –