eva*_*van 21 java thread-safety comparator
如果我创建一个Comparator的单个实例,那么可以跨多个线程使用该实例来使用Collections.sort()对集合进行排序吗?或者,我是否需要为每次调用Collections.sort()创建一个新的Comparator实例以确保线程安全?
Mic*_*rdt 24
这完全取决于你如何实现Comparator.例如,如果它具有写入的实例变量或者在比较期间隐式更改其内容,则它将不是线程安全的.
大多数Comparator实现都不会这样做,但可能合理发生的一种情况是使用a SimpleDateFormat来比较表示日期的字符串.不幸的是,SimpleDateFormat它本身不是线程安全的.
Comparator是一个接口,它没有固有的并发属性.如果您的实现是线程安全的,那么这取决于您如何编写它.如果它所做的一切都局限于比较方法的范围(无实例或类级别状态),并且它使用的所有资源都是线程安全的,那么它本身就是线程安全的.