Я полагаю, вы говорите о защите своего кэша от условий гонки .Состояние гонки возникает, когда два или более потоков обращаются к общему ресурсу (в данном случае к вашему кешу) одновременно без надлежащей защиты.
Существует множество способов защитить кеш от неправильного многопоточного доступа.Не имея подробностей или не показывая нам некоторый код, трудно быть конкретным, но рассмотрим некоторые из следующих методов:
Использование ключевого слова synchronized
, конечно, может помочь защитить кэш отусловия гонки.Поток, добавляющий экземпляр вашего класса в кеш, будет синхронизироваться в кеше при его вставке.Потоки, получающие экземпляр из кэша, также будут синхронизироваться.
Если экземпляр вашего класса должен использоваться только одним потоком за раз, тогда вы можете использовать BlockingQueue
размером один.Экземпляр вашего класса может быть добавлен в очередь, и потоки будут ждать, пока один не получит экземпляр.Когда это будет сделано, он поместит его обратно в BlockingQueue
, позволяя следующему потоку получить класс.
Убедитесь, что экземпляр вашего класса полностью инициализирован, когда он помещается в кеш.
Если вы отредактируете свой вопрос и предоставите образец кода или более подробную информацию, мы поможем вам лучше.