final static
类的实例
ComparatorChain
。Collections.sort(List<T> list, Comparator<? super T> c)
我正在使用此实例。Collections.sort(List<T> list, Comparator<? super T> c)
个实例上调用ComparatorChain
Comparator.compare(T o1, T o2)
中的某处。现在我的初学者提问:
当多个线程使用此静态实例时,它们是否可以同时调用Comparator.compare(T o1, T o2)
方法?
我认为只要不涉及synchronized
修饰符,他们就可以。这是对的吗?
为什么我想知道这个?
通过这样的static
实例,我可以避免无用地创建ComparatorChain
个对象。
答案 0 :(得分:1)
是的,如果没有涉及同步,则没有什么可以阻止多个线程同时多次调用同一个方法 - 无论是静态方法还是多个线程可访问的对象上的实例方法,然而这些线程可以访问它。
值得注意的是,虽然变量可以是静态的,但是没有静态对象这样的概念。虽然在这种情况下我知道你的意思,变量和对象之间的区别通常是至关重要的。
只要你的ComparatorChain.compare
方法是线程安全的,听起来你应该没问题。大多数比较可以很容易是线程安全的,因为它们很少会改变状态。
答案 1 :(得分:0)
只要使用一个实例(singleton)就可以了:
synchronized
(它会起作用,但会阻止并使事情变慢)一个例子是java.lang.String.CASE_INSENSITIVE_ORDER
- static
比较器
答案 2 :(得分:0)
在阅读ComparatorChain
的源代码后,如果多线程访问ComparatorChain
实例,我发现它是有状态的而不是线程安全的。