ConcurrentHashMap предпочтен, когда можно использовать его - хотя он требует, по крайней мере, Java 5.
Это разработано для масштабирования хорошо при использовании несколькими потоками. Производительность может быть незначительно более плохой, когда только единственный поток получает доступ к Карте за один раз, но значительно лучше когда несколько потоков получают доступ к карте одновременно.
я нашел запись в блоге , который воспроизводит таблицу от превосходного книжного Параллелизма Java На практике , который я полностью рекомендую.
Collections.synchronizedMap имеет смысл действительно, только если необходимо обернуть карту некоторыми другими характеристиками, возможно, своего рода заказанную карту, как TreeMap.
Чтобы обеспечить соблюдение этого типа вещей, вам понадобится несколько типов (чтобы ограничить то, что доступно в каком контексте) - или, по крайней мере, несколько интерфейсов:
public class Fluently : IFluentlyDoes, IFluentlyIs
{
public IFluentlyIs Is(string lhs)
{
return this;
}
public IFluentlyDoes Does(string lhs)
{
return this;
}
Fluently IFluentlyDoes.EqualTo(string rhs)
{
return this;
}
Fluently IFluentlyIs.LessThan(string rhs)
{
return this;
}
Fluently IFluentlyIs.GreaterThan(string rhs)
{
return this;
}
}
public interface IFluentlyIs
{
Fluently LessThan(string rhs);
Fluently GreaterThan(string rhs);
}
public interface IFluentlyDoes
{ // grammar not included - this is just for illustration!
Fluently EqualTo(string rhs);
}
Мое решение было бы
public class Fluently
{
public FluentlyIs Is(string lhs)
{
return this;
}
public FluentlyDoes Does(string lhs)
{
return this;
}
}
public class FluentlyIs
{
FluentlyIs LessThan(string rhs)
{
return this;
}
FluentlyIs GreaterThan(string rhs)
{
return this;
}
}
public class FluentlyDoes
{
FluentlyDoes EqualTo(string rhs)
{
return this;
}
}
Очень похоже на решение Гравелла, но, на мой взгляд, немного проще для понимания.