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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

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

提问于
用户回答回答于

这完全取决于你如何实现Comparator。例如,如果它有写入的实例变量,或者在比较过程中内容被隐式更改,则它不会是线程安全的。

大多数Comparator实现不会这样做,但可能合理发生的一种情况是使用a SimpleDateFormat来比较表示日期的字符串。不幸的是,SimpleDateFormat它本身不是线程安全的。

用户回答回答于

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

扫码关注云+社区