2010-08-26 4 views
7

guava-libraries есть класс Ordering. Мне интересно, безопасен ли поток.guava-libraries - Является ли класс класса заказа безопасным?

Например, может ли он использоваться как статическая переменная?

public static Ordering<String> BY_LENGTH_ORDERING = new Ordering<String>() { 
    public int compare(String left, String right) { 
     return Ints.compare(left.length(), right.length()); 
    } 
}; 

ответ

8

Это как поточно-безопасный, как ваш метод compare.

По умолчанию для Ordering нет данных экземпляра, так что единственное, что имеет значение, это то, как вы определяете свой метод сравнения.

5

Да, Ordering объекты все неизменны, если вы делаете что-то, чтобы сделать их изменяемыми, такие как расширение Ordering и добавления изменяемых полей или предоставление изменяемого Comparator в методе from(Comparator) или в onResultOf(Function) изменяемого Function.

Но, как правило, вам действительно нужно идти по пути, чтобы создать тот, который не является потокобезопасным.