Недавно я начал использовать JCS, и у меня возникла проблема «Безопасен ли поток JCS?».
Ну, я взглянул на исходный код и обнаружил, что реализация учитывает безопасность потоков.
JCS.getInstance (String region) всегда возвращает один и тот же объект CompositeCache для каждого ключа региона, заключенного в новый объект JCS. Другими словами, ссылка на единственный объект CompositeCache сохраняется во вновь созданном объекте JCS-обертки. Когда мы вызываем такие методы, как JCS.get (), JCS.put (), JCS.remove () и т. Д., Это всегда заканчивается вызовом метода единственного объекта CompositeCache. Итак, это синглтон.
Важно, что объект CompositeCache имеет синхронизированные методы для своих операций записи (вставка, удаление и т. Д.), А во внутренней реализации используются объекты Hashtable, которые также являются поточно-ориентированными. Поэтому я думаю, что JCS позаботился о безопасности потоков на атомных уровнях.
То, что Томас упомянул выше, верно. Если объект кэша был синхронизирован, то следует избегать проблемы параллелизма, что, как кажется, не так, как упомянуто выше, может заключаться в том, что проблема не совсем параллельна.
Однако я просто хотел бы поделиться тем фактом, что не следует планировать использовать JCS, получая блокировку уровня объекта, как обсуждалось выше, так как реализация кажется поточно-ориентированной, и мы должны позволить обрабатывать параллелизм на более атомных уровнях, в поисках лучшей производительности.