我有一个3线程(不包括主线程)的程序。第一个线程移动窗口中的对象,第二个线程检查对象冲突,第三个线程应该定期添加到对象的ArrayList。所有这三个线程都在操纵同一个对象列表(尽管前两个实际上并没有改变列表,只是内部的对象)。但是,当意图添加到列表的线程尝试添加对象时,我收到一个错误。是否有可能从一个不同的线程操纵一个ArrayList?从单独的线程添加到ArrayList
0
A
回答
2
您可以通过将处理数组列表的代码放入synchronized(arrayList) { ... }
块中来防止竞争条件。
2
是的,你可以在多个线程中处理数组。关于在对象中使用关键字,您可以在Java documentation中阅读更多内容。
0
首先,如果您有多线程应用程序...宁愿使用类似Vector
而不是ArrayList
,因为ArrayList
不被视为线程安全。
另外,为了处理并发性,您可以使用make方法并对其执行操作,或使用块。
2
ArrayList
没有什么特别的,它可以防止它从多个线程读取和写入。但是,请注意warning in the Javadoc:
请注意,此实现不是同步的。如果多个线程同时访问ArrayList实例,并且至少有一个线程在结构上修改了列表,则它必须在外部同步。 (结构修改是任何添加或删除一个或多个元素的操作,或明确调整后备数组的大小;仅设置元素的值不是结构修改。)这通常通过同步某些自然封装名单。如果不存在这样的对象,则应使用Collections.synchronizedList方法“列出”列表。这最好在创建时完成,以防止意外的名单不同步访问:
List list = Collections.synchronizedList(new ArrayList(...));
还值得通过Synchronization Tutorial阅读。
相关问题
- 1. 从单独的线程添加菜单项
- 2. 将单词添加到一个ArrayList并发运行的线程
- 3. 如何从一个线程循环arraylist,而从其他线程添加到它?
- 4. 从单独的线程
- 5. 几个单独的线程添加到MQTT Python代码
- 6. Java:JButton和ArrayList:从ArrayList中添加到JPanel
- 7. 使用“add”方法将对象从单独的类添加到ArrayList中
- 8. 添加到ArrayList
- 9. 添加到ArrayList的
- 10. 将ArrayList添加到ArrayList
- 11. 将ArrayList添加到ArrayList
- 12. 添加币值把它单独上线
- 13. 将运行的线程对象添加到arraylist中
- 14. 如何通过Java中的线程将项目添加到ArrayList
- 15. 单独的线程VS SERVICE +单独的线程
- 16. 在单独的线程中加载TexturesAtlas
- 17. 从线程向表单添加标签
- 18. 在一个单独的线程中添加子片段
- 19. 解析器(在单独的线程上)完成后添加UIButton
- 20. 安卓:从一个单独的线程
- 21. 从单独的线程访问TMediaPlayer.Position
- 22. 从单独的线程开始活动?
- 23. 从一个单独的线程绘画?
- 24. 创建从一个单独的线程
- 25. 添加的ArrayList到另一个的ArrayList
- 26. 单独的dbx连接到线程
- 27. 添加到ArrayList Java
- 28. VB.net - 添加到ArrayList
- 29. VisualSVN - 从单独的Repos添加?
- 30. MySQL从单独的表中添加列
Java将无法识别“同步” - 它必须拼写为“同步”。 – ajb