⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selfcleaner.java

📁 一个以tomcat作为服务器的C/S架构的聊天系统
💻 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 + -