2013-08-28 4 views
0

Этот вопрос относится к одному, который я только что спросил here.Являются ли эти два метода эквивалентными?

servers является private static ConcurrentHashMap, являются следующие два метода, а третий подход эквивалентен тем, что карта servers будет отражать изменение, сделанное всеми тремя?

1.

public static synchronized int releaseConnection(Server s) { 
    return servers.get(s.getId()).decrementConns(); 
} 

2.

public static synchronized int releaseConnection(Server s) { 
    return s.decrementConns(); 
} 


3. просто вызовите decrementConns() где его необходимости (в других классах)?

+1

Что делать, если на карте нет? – SLaks

+3

Кроме того, не используйте методы 'synchronized'; они не обеспечивают соответствующих уровней детализации. – SLaks

+0

Если экземпляр на карте (если он найден там, конечно, как указано в SLaks!), А экземпляр, заданный в качестве аргумента, один и тот же, эти два эквивалентны. – ppeterka

ответ

1

3-й способ является лучшим и должен быть достаточным. Все 3 будут выполнять эту работу, но 1 и 2 не нужны, поскольку вы работаете с ConcurrentHashMap.

Смежные вопросы