📄 controlwindow.java
字号:
package com.wireless.sms.gwif.smsagent.workthread;
/**
* <p>Title: WVAS-PLATFORM-SMS</p>
* <p>Description: 无线增值业务平台----短信平台-----接口机程序</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: moon</p>
* @author: tech team
* @version 1.0
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
//import org.apache.log4j.Logger;
import com.wireless.sms.pub.entity.MT;
import com.wireless.sms.pub.mq.*;
import com.wireless.sms.gwif.smsagent.global.SmsGWIFGlobal;
//import com.wireless.sms.gwif.smsagent.global.LoggerConstant;
public class ControlWindow {
private static ControlWindow _instance = new ControlWindow();
private HashMap hashMap = new HashMap();
// private MTQueue mtqueue = MTQueue.getInstance();
private ObjectQueue statqueue = ObjectQueue.getInstance();
private int waitTime = SmsGWIFGlobal.waitTime;
private ControlWindow() {}
/** 线程同步控制确保模块仅有一个实例 */
public synchronized static ControlWindow getInstance() {
return _instance;
}
/***
* Returns the current number of object in the queue
*/
public synchronized int size() {
return hashMap.size();
}
/***
* adds HashMap.
* At least one thread will be notified.
*/
public synchronized void put(Object key, Object Value) {
hashMap.put(key, Value);//Value=处理类processSend生成的Vector,有2个Element,分别是mt和System.currentTimeMillis()
// notify();
}
/**
* 该方法将根据flag值进行响应
* @param key flag=false时,为mt的seqnum,该键将在滑动窗口中有映射值(MT+MT发送时间);flag=true时该参数无效.
* @param flag 该值为true时,从滑动窗口中移除等待应答超时的MT的HashMap映射值,同时将其状态设置为T;
* 为false时,返回请求seqnum对应的HashMap里映射的Vector值(Element包含MT,PutTime)
* @return 返回Object(实际是Vector)
*/
public synchronized Object get(Object key, boolean flag) {
Object value = null;
if (flag) {
System.out.println("-----------------清理滑动窗口!");
Iterator item = hashMap.keySet().iterator();
Vector tmpKeyWordArray = new Vector();
while (item.hasNext()) {
Object tmpkey = item.next();
Vector tmpv = (Vector)hashMap.get(tmpkey);
MT tmpmt = (MT)tmpv.get(0);
String tmpTime = (String)tmpv.get(1);
long putTime = Long.parseLong(tmpTime);
if ( System.currentTimeMillis() - putTime > (waitTime * 1000)) {
//hashMap.remove(tmpkey);
tmpKeyWordArray.add(tmpkey);
//modified by liangchw 9.22
tmpmt.setStatus("T");//超时
statqueue.add(tmpmt);
}
}
for (int i = 0; i < tmpKeyWordArray.size(); i++) {
hashMap.remove(tmpKeyWordArray.elementAt(i));
}
tmpKeyWordArray.removeAllElements();
}else{
value = hashMap.get(key);
}
// notify();
return value;
}
public HashMap getMap(){
return hashMap;
}
/***
* Removes the first object from the HashTable, blocking until one is available.
* Note that this method will never return null and could block forever.
*/
public synchronized Object remove(Object key) {
return hashMap.remove(key);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -