diff --git a/src/main/java/com/cool/core/leaf/segment/SegmentIDGenImpl.java b/src/main/java/com/cool/core/leaf/segment/SegmentIDGenImpl.java index 483c8db..3399f3f 100644 --- a/src/main/java/com/cool/core/leaf/segment/SegmentIDGenImpl.java +++ b/src/main/java/com/cool/core/leaf/segment/SegmentIDGenImpl.java @@ -52,9 +52,9 @@ public class SegmentIDGenImpl implements IDGenService { * 一个Segment维持时间为15分钟 */ private static final long SEGMENT_DURATION = 15 * 60 * 1000L; - private ExecutorService service = new ThreadPoolExecutor(5, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue(), new UpdateThreadFactory()); + private final ExecutorService service = new ThreadPoolExecutor(5, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>(), new UpdateThreadFactory()); private volatile boolean initOK = false; - private Map cache = new ConcurrentHashMap(); + private final Map cache = new ConcurrentHashMap<>(); private final LeafAllocMapper leafAllocMapper; public static class UpdateThreadFactory implements ThreadFactory { @@ -105,18 +105,15 @@ public class SegmentIDGenImpl implements IDGenService { try { List dbTags = leafAllocMapper.selectListByQuery(QueryWrapper.create().select( LeafAllocEntity::getKey)).stream().map(LeafAllocEntity::getKey).toList(); - if (dbTags == null || dbTags.isEmpty()) { + if (dbTags.isEmpty()) { return; } List cacheTags = new ArrayList(cache.keySet()); Set insertTagsSet = new HashSet<>(dbTags); Set removeTagsSet = new HashSet<>(cacheTags); //db中新加的tags灌进cache - for(int i = 0; i < cacheTags.size(); i++){ - String tmp = cacheTags.get(i); - if(insertTagsSet.contains(tmp)){ - insertTagsSet.remove(tmp); - } + for (String tmp : cacheTags) { + insertTagsSet.remove(tmp); } for (String tag : insertTagsSet) { SegmentBuffer buffer = new SegmentBuffer(); @@ -129,11 +126,8 @@ public class SegmentIDGenImpl implements IDGenService { logger.info("Add tag {} from db to IdCache, SegmentBuffer {}", tag, buffer); } //cache中已失效的tags从cache删除 - for(int i = 0; i < dbTags.size(); i++){ - String tmp = dbTags.get(i); - if(removeTagsSet.contains(tmp)){ - removeTagsSet.remove(tmp); - } + for (String tmp : dbTags) { + removeTagsSet.remove(tmp); } for (String tag : removeTagsSet) { cache.remove(tag); @@ -239,26 +233,23 @@ public class SegmentIDGenImpl implements IDGenService { try { final Segment segment = buffer.getCurrent(); if (!buffer.isNextReady() && (segment.getIdle() < 0.9 * segment.getStep()) && buffer.getThreadRunning().compareAndSet(false, true)) { - service.execute(new Runnable() { - @Override - public void run() { - Segment next = buffer.getSegments()[buffer.nextPos()]; - boolean updateOk = false; - try { - updateSegmentFromDb(buffer.getKey(), next); - updateOk = true; - logger.info("update segment {} from db {}", buffer.getKey(), next); - } catch (Exception e) { - logger.warn(buffer.getKey() + " updateSegmentFromDb exception", e); - } finally { - if (updateOk) { - buffer.wLock().lock(); - buffer.setNextReady(true); - buffer.getThreadRunning().set(false); - buffer.wLock().unlock(); - } else { - buffer.getThreadRunning().set(false); - } + service.execute(() -> { + Segment next = buffer.getSegments()[buffer.nextPos()]; + boolean updateOk = false; + try { + updateSegmentFromDb(buffer.getKey(), next); + updateOk = true; + logger.info("update segment {} from db {}", buffer.getKey(), next); + } catch (Exception e) { + logger.warn(buffer.getKey() + " updateSegmentFromDb exception", e); + } finally { + if (updateOk) { + buffer.wLock().lock(); + buffer.setNextReady(true); + buffer.getThreadRunning().set(false); + buffer.wLock().unlock(); + } else { + buffer.getThreadRunning().set(false); } } });