Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save amirmv2006/ac35a9b3b4dbd8af99b15233b58547e6 to your computer and use it in GitHub Desktop.
Save amirmv2006/ac35a9b3b4dbd8af99b15233b58547e6 to your computer and use it in GitHub Desktop.
a way for parallel process data in a Map.
/**
* Copyright (c) Experian, 2018. All rights reserved.
*/
package com.javadeveloperzone;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ILock;
import com.hazelcast.core.IMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
/**
* @author Amir
*/
@Component
public class TestHazelcast {
public static final String KEY = "key";
@Autowired
private HazelcastInstance instance;
Logger logger = LoggerFactory.getLogger("Test");
@PostConstruct
public void init() {
IMap<Object, Object> amir = instance.getMap("amir");
for (int i = 0; i < 500; i++) {
String mapKey = KEY + i;
if (!amir.containsKey(mapKey)) {
UUID val = UUID.randomUUID();
amir.put(mapKey, val);
logger.info("put value in map " + mapKey + ":" + val);
}
}
// consumeCache(amir);
System.out.println("amir = " + amir);
Timer timer = new Timer();
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.MINUTE, Integer.parseInt(System.getProperty("fire.min", "48")));
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR));
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
timer.schedule(new TimerTask() {
@Override
public void run() {
consumeCache(amir);
}
}, cal.getTime());
logger.info("scheduled on " + cal.getTime());
}
private void consumeCache(final IMap<Object, Object> amir) {
ILock lock = instance.getLock("lock");
lock.lock();
Iterator<Map.Entry<Object, Object>> iterator = amir.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Object, Object> next = iterator.next();
logger.info("consumed " + next.getKey() + ":" + next.getValue());
amir.remove(next.getKey());
lock.unlock();
lock.lock();
iterator = amir.entrySet().iterator();
}
lock.unlock();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment