Я пытаюсь обработать некоторые промежуточные данные в фоновом режиме, чтобы избежать проблем с производительностью в главном потоке.
План состоит в том, чтобы собирать данные и обрабатывать их в фоновом режиме, поддерживая порядок вставки. Самое старое сообщение должно быть обработано в первую очередь. Чтение и запись в кеш происходят одновременно. Производительность является ключевым моментом здесь.
Есть ли способ добиться этого с помощью кэширования гуавы?
Вот код, который у меня есть:
public static Cache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(Integer.MAX_VALUE)
.concurrencyLevel(5)
.removalListener(notification -> {
System.out.println("REMOVE : " + notification.getKey() + " CAUSE :" + notification.getCause().name());
})
.build();
// Different threads are adding data to this queue by calling
cache.put(key, value);
// The worker thread
public void run() {
while (true) {
if (cache.size() > 0) {
final ConcurrentMap<String, String> cacheMap = cache.asMap();
for (Map.Entry<String, String> entry : cacheMap.entrySet()) {
//send data to a different system.
cache.invalidate(entry.getKey());
}
} else {
// Add delay of 5 sec
Thread.sleep(5000);
}
}
}