您的位置:首页 > 编程语言 > Java开发

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

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: