java - java中的并发有序列表

标签 java multithreading sorting concurrency thread-safety

我目前正在开发 F1 模拟器,并且一直在努力实现记分板。

我有多辆车,每辆车都在一个线程上,每 5 秒更新一次距离和速度。另外,我还有另一个分数线程,它再次每 5 秒更新一次。我的问题是更新和排序分数。现在我正在使用 ConcurrentHashMap 来存储所有车辆。每辆车都会更新,我只是将其制成一个列表并对其进行排序:

public void sortCars() {
    Collections.sort(sortedCars, Collections.reverseOrder());   
}

我的主要问题如下,汽车需要以某种方式接收更新的列表,我将列表设为静态,但我的教授告诉我这很糟糕,因为列表不断更新,所以我的另一个选择是给出每个车辆都有一个分数,并在每个线程的每次迭代中对其进行排序。

我尝试过使用交换器,但速度太慢。有一段时间想过使用 Callable,但感觉不太对。除了列出的选项之外,我还有其他选择吗?如果不是,哪一个最好?

忘了补充,车辆只修改自己,分数类别只对其进行排序

最佳答案

事实证明,最好的解决方案是使用列表向车辆添加一个变量,每次我在 Score 用户中对它进行排序时,都会使用 setter 。不完全是我想要的,但有效,我只是想要没有变量,但我猜那是不可能的。

现在想想,我真是傻了。

关于java - java中的并发有序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61685792/

相关文章:

Java,使用Scanner逐行获取数据

java - 为什么我的 Play 框架模型作为空白记录保存到数据库中?

Java Eclipse 错误 'Source not found.'

c++ - 您如何将 CreateThread 用于作为类成员的函数?

python - python 中的合并排序 - 太慢?

java - 如何使用java代码根据building_Id和floor_Id从MongoDB获取数据?

Java:从另一个线程停止一个线程中的所有 Activity

C# 多线程 - 在线程之间移动对象

c++ - 如何在 thrust::sort 中使用结构数组?

c++ - 如何将模式从一个数组更改为另一个数组然后再返回