程序总是在两三天就报一次内存泄漏的异常,不知道是什么原因引起的,因为项目中有一个地方冲到队列,在队列中创建了很多的线程不知道是不是这个引起了。。。
public class GlobalVariables {
public static ExecutorService pool = Executors.newFixedThreadPool(1000);
public static BlockingQueue<Object> queue = new ArrayBlockingQueue<Object>(1000);
public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();
}
public class AddQueues implements Runnable{
private Object obj;
public AddQueues(Object obj) {
this.obj = obj;
}
@Override
public void run() {
try {
System.out.println("-------------"+obj);
GlobalVariables.queue.put(obj);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public Map<String, Object> updateQueuePool(Map<String, Object> map) throws Exception {
EntranceVisitCountDTO dto = new EntranceVisitCountDTO();
dto.setAdminUserId(Integer.parseInt(map.get("adminUserId").toString()));
GlobalVariables.pool.submit(new AddQueues(dto));
Map<String,Object> param = new HashMap<String,Object>();
param.put("result", "yes");
return param;
}
/**
* 定时将队列里的数据放到map中
*/
@Scheduled(cron = "0/3 * * * * ?")
public synchronized void updateVisitCountOfMap(){
try{
if(!GlobalVariables.queue.isEmpty()){
for(int i = 0; i < 100; i++){
Object obj = GlobalVariables.queue.take();
if(obj instanceof EntranceVisitCountDTO){
EntranceVisitCountDTO dto = (EntranceVisitCountDTO)obj;
Integer visitCount = GlobalVariables.map.get(dto.getAdminUserId());
if(visitCount != null && GlobalVariables.map.size() <= 1000){
GlobalVariables.map.put(dto.getAdminUserId(), visitCount +1);
}else if(GlobalVariables.map.size() > 1000){
visitDayCountService.updateEntranceShowCount();
缥缈止盈
天涯尽头无女友
Qyouu
相关分类