📄 selfcleaner.java
字号:
package com.cxz.httpchat.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import com.cxz.httpchat.message.Message;
import com.cxz.httpchat.util.TimedQueue;
public class SelfCleaner implements Runnable{
private Map<Integer, TimedQueue> map = new ConcurrentHashMap<Integer, TimedQueue>();
private Thread gcThread;
private static SelfCleaner instance;
private static final int POLL_SECONDS = 60;
private boolean runFlag = true;
private static final int UNIT_CONVERSION = 1000;
public static synchronized SelfCleaner getInstance() {
if (instance == null) {
instance = new SelfCleaner();
}
return instance;
}
private SelfCleaner(){
}
public void stopGc(){
runFlag = false;
gcThread.interrupt();
}
public void forceGc() {
//Interrupted the sleeping gc Thread
gcThread.interrupt();
}
public boolean isStopped() {
return runFlag;
}
public void start() {
gcThread = new Thread(this, "gcThread");
gcThread.start();
}
public void run() {
cleanTheHashMap();
while(runFlag){
try {
Thread.sleep(POLL_SECONDS * UNIT_CONVERSION);
} catch (InterruptedException e) {
// This thread has been woken up by a interruption.
System.out.println("Hey, man, get up from the bed and gc.");
}
}
}
public void remove(Integer id) {
map.remove(id);
}
public List<Message> getMessage(Integer id){
if(map.get(id) == null){
List<Message> list = new ArrayList<Message>();
return list;
} else {
return map.get(id).toList();
}
}
public void add(Integer id, Message message) {
TimedQueue queue = map.get(id);
if (queue == null) {// If the user does not exists in the queue
TimedQueue temp = new TimedQueue();
temp.add(message);
map.put(id, temp);
} else {
queue.add(message);
}
}
private void cleanTheHashMap() {
Set<Integer> set = map.keySet();
for (Integer id : set) {
TimedQueue tq = map.get(id);
if (tq.isOutOfDate()) {
map.remove(id);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -