JAVA CACHE
2015-09-24 17:18
489 查看
public class TaskCache implements API, Runnable { public TaskCache() { startSchedule(); } private Map<String, List<Task>> taskMap = new HashMap<String, List<Task>>(); private final String ID = "ID_"; private final String HOST = "HOST_"; private final String IP = "IP_"; private ConcurrentMap<Long, Task> timeMap = new ConcurrentHashMap<Long, Task>(); public Map<Long, Task> getTimeMap() { return timeMap; } public void put(Task task, Long time) { synchronized(taskMap) { timeMap.put(time,task); if (taskMap.containsKey(ID + task.getId())) { taskMap.get(ID + task.getId()).add(task); } else { List<Task> idTask = new ArrayList<Task>(); idTask.add(task); taskMap.put(ID + task.getId(), idTask); } if (taskMap.containsKey(IP + task.getIp())) { taskMap.get(IP + task.getIp()).add(task); } else { List<Task> ipTask = new ArrayList<Task>(); ipTask.add(task); taskMap.put(IP + task.getIp(), ipTask); } if (taskMap.containsKey(HOST + task.getHost())) { taskMap.get(HOST + task.getHost()).add(task); } else { List<Task> hostTask = new ArrayList<Task>(); hostTask.add(task); taskMap.put(HOST + task.getHost(), hostTask); } } } public void add(Task task, int expiredTime) { try { synchronized(taskMap) { System.out.println("task map size : "+taskMap.size()); put(task, expiredTime + System.currentTimeMillis()); } } catch (Exception e) { e.printStackTrace(); } } public List<Task> queryById(String id) { synchronized(taskMap) { return taskMap.get(ID + id); } } public List<Task> queryByIp(String ip) { synchronized(taskMap) { return taskMap.get(IP + ip); } } public List<Task> queryByHost(String host) { synchronized(taskMap) { return taskMap.get(HOST + host); } } public void remove(Task task) { try { synchronized(taskMap) { List idList = taskMap.get(ID + task.getId()); if (idList!=null&&idList.contains(task)) { idList.remove(task); if (idList.size() == 0) { System.out.println("remove ipList " + ID + task.getId()); taskMap.remove(ID + task.getId ()); } System.out.println(task.toString() + " has removed from idList"); } else { System.out.println("no operation idList"); } List ipList = taskMap.get(IP + task.getIp()); if (ipList!=null&& ipList.contains(task)) { ipList.remove(task); System.out.println(task.toString() + " has removed ipList"); if (ipList.size() == 0) { System.out.println("remove ipList " + IP + task.getIp()); taskMap.remove(IP + task.getIp()); } } else { System.out.println("no operation ipList"); } List hostList = taskMap.get(HOST + task.getHost()); if (hostList!=null &&hostList.contains(task)) { hostList.remove(task); System.out.println(task.toString() + " has removed hostList"); if (hostList.size() == 0) { System.out.println("remove hostlist " + HOST + task.getHost()); taskMap.remove(HOST + task.getHost()); } } else { System.out.println("no operation hostList"); } } } catch (Exception e) { e.printStackTrace(); } } public void run() { try { for (Long key : timeMap.keySet()) { System.out.println("prepare remove task "+key); long current = System.currentTimeMillis(); if (current > key) { Task t = timeMap.get(key); System.out.println("remove t"); remove(t); } } } catch (Exception e) { e.printStackTrace(); } } public void startSchedule() { ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleAtFixedRate(this, 0, 2, TimeUnit.SECONDS); } }
/** * Created by baidu on 15/9/23. */ public class Task { private String id; private String ip; private String host; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } @Override public String toString() { return "Task{" + "id='" + id + '\'' + ", ip='" + ip + '\'' + ", host='" + host + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Task task = (Task) o; if (!id.equals(task.id)) { return false; } if (!ip.equals(task.ip)) { return false; } return host.equals(task.host); } @Override public int hashCode() { int result = id.hashCode(); result = 31 * result + ip.hashCode(); result = 31 * result + host.hashCode(); return result; } }
/** * Created by baidu on 15/9/24. */ public class TaskFactory { public static Task buildTask(){ Task task = new Task(); task.setId(UUID.randomUUID().toString()); task.setHost(UUID.randomUUID().toString()); task.setIp(UUID.randomUUID().toString()); return task; } public static void main(String[] args) { System.out.println("haha"); } }
/** * Created by baidu on 15/9/23. */ public interface API { public void add(Task task ,int expiredTime); public List<Task> queryById(String id); public List<Task> queryByIp(String ip); public List<Task> queryByHost(String host); }
public class CacheTest { public static void main(String[] args) { API api = new TaskCache(); while (true){ api.add(TaskFactory.buildTask(),5000); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- Java SE EE ME
- Java Web - 日志-log4j(二)-- 将日志发送到邮件
- 《2016展讯校招java软开最后一道题》考点:父类子类static{}块、{}块、构造函数的调用顺序
- Java List循环(转)
- SpringMVC与Struts2区别与比较总结
- SpringMVC与Struts2的对比
- 图的深度遍历和广度遍历(Java实现)
- java 生成 word方案
- eclipse创建django项目报错误Django not found(新建完成后项目中没有manage、urls等文件)
- JDK源代码学习系列07----Stack
- spring在代码中获取bean的方式
- 跳跃Java一些周期,双跳FOR周期
- Java如何获取ldap中的sid
- Java学习笔记【对象构造】
- Java 枚举(menu)的用法
- Java中如何克隆集合——ArrayList和HashSet深拷贝
- Java中如何克隆集合——ArrayList和HashSet深拷贝
- Java基础知识强化63:Arrays工具类之方法源码解析
- Java Web - 日志-log4j(二)--配置文件说明
- java:axis2环境下获取方法参数名的另一种方法