在Java中,Collections.sort()线程中使用的比较器是安全的吗?

2022-09-01 23:17:23

如果我创建了一个比较器的单个实例,该实例是否可以跨多个线程使用 Collections.sort() 对集合进行排序?或者,我是否需要为每次调用 Collections.sort() 创建一个新的比较器实例以确保线程安全?


答案 1

这完全取决于您如何实现 .例如,如果它具有写入实例变量或在比较期间隐式更改其内容的实例变量,则它不是线程安全的。Comparator

大多数实现不执行此类操作,但可能合理发生的一种情况是使用 a 来比较表示日期的字符串。不幸的是,它本身不是线程安全的。ComparatorSimpleDateFormatSimpleDateFormat


答案 2

比较器是一个接口,它没有固有的并发属性。这取决于你如何编写它,如果你的实现是线程安全的。如果它所做的一切都局限于 compare 方法的范围(无实例或类级别状态),并且它使用的所有资源都是线程安全的,那么它本身将是线程安全的。


推荐