Java实现一个简单的内存缓存类详解编程语言

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); 
	} 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10519.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论