通过多个线程访问静态实例的方法

时间:2011-10-05 06:54:39

标签: java multithreading

现在我的初学者提问:

当多个线程使用此静态实例时,它们是否可以同时调用Comparator.compare(T o1, T o2)方法?

我认为只要不涉及synchronized修饰符,他们就可以。这是对的吗?

为什么我想知道这个?

通过这样的static实例,我可以避免无用地创建ComparatorChain个对象。

3 个答案:

答案 0 :(得分:1)

是的,如果没有涉及同步,则没有什么可以阻止多个线程同时多次调用同一个方法 - 无论是静态方法还是多个线程可访问的对象上的实例方法,然而这些线程可以访问它。

值得注意的是,虽然变量可以是静态的,但是没有静态对象这样的概念。虽然在这种情况下我知道你的意思,变量和对象之间的区别通常是至关重要的。

只要你的ComparatorChain.compare方法是线程安全的,听起来你应该没问题。大多数比较可以很容易是线程安全的,因为它们很少会改变状态。

答案 1 :(得分:0)

只要使用一个实例(singleton)就可以了:

  • 您不在实例字段中存储任何内容
  • 没有synchronized(它会起作用,但会阻止并使事情变慢)

一个例子是java.lang.String.CASE_INSENSITIVE_ORDER - static比较器

答案 2 :(得分:0)

在阅读ComparatorChain的源代码后,如果多线程访问ComparatorChain实例,我发现它是有状态的而不是线程安全的。