加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java实现一个简单的内存缓存类

发布时间:2020-12-15 03:17:31 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.util.Collections;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.conc

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class SimpleCache<T> {
	private final Map<String,T> m_objects;
	private final Map<String,Long> m_expiredObjects;
	private final long m_lExpireTime;
	private final ExecutorService m_executor;
	public SimpleCache() {
		this(500);
	}
	public SimpleCache(final int nExpireTime) {
		m_objects = Collections.synchronizedMap(new HashMap<String,T>());
		m_expiredObjects = Collections.synchronizedMap(new HashMap<String,Long>());
		m_lExpireTime = nExpireTime;
		m_executor = Executors.newFixedThreadPool(256);
		Executors.newScheduledThreadPool(5).scheduleWithFixedDelay(RemoveExpiredObjects(),m_lExpireTime / 2,m_lExpireTime,TimeUnit.SECONDS);
	}
	private final Runnable RemoveExpiredObjects() {
		return new Runnable() {
			public void run() {
				for (final String name : m_expiredObjects.keySet()) {
					if (System.currentTimeMillis() > m_expiredObjects.get(name)) {
						m_executor.execute(CreateRemoveRunnable(name));
					}
				}
			}
		};
	}
	private final Runnable CreateRemoveRunnable(final String name) {
		return new Runnable() {
			public void run() {
				m_objects.remove(name);
				m_expiredObjects.remove(name);
			}
		};
	}
	public long GetExpireTime() {
		return m_lExpireTime;
	}
	public void Put(final String name,final T obj) {
		Put(name,obj,m_lExpireTime);
	}
	public void Put(final String name,final T obj,final long expireTime) {
		m_objects.put(name,obj);
		m_expiredObjects.put(name,System.currentTimeMillis() + expireTime * 1000);
	}
	public T Get(final String name) {
		final Long expireTime = m_expiredObjects.get(name);
		if (expireTime == null)
			return null;
		if (System.currentTimeMillis() > expireTime) {
			m_executor.execute(CreateRemoveRunnable(name));
			return null;
		}
		return m_objects.get(name);
	}
	@SuppressWarnings("unchecked")
	public <R extends T> R Get(final String name,final Class<R> type) {
		return (R) Get(name);
	}
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读