[RESOLVIDO] Problema com atualização de HashMap na Thread - Ajudem por favor

BOa tarde preciso fazer um modulo no meu sistema de chat web para detecção de usuários q estiverem off-line no momento em q o browser é fechado.
fiz o modelo em q a pagina fica mandando uma requisição a cada 2 s para o servidor para que eu possa ter esse controle o mais rápido possível
estou usando uma Thread para ficar sempre comparando uma lista online atual (online1) com uma outra lista anterior (online2) para comparar si alguém saiu da lista
o problema q que a “online2” atualiza junto com a “online1” e não sei por isso ta acontecendo ja que a mesma so deveria ficar igual a outra depois de fazer a comparação na Thread

[code]package br.com.you.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSessionListener;

import br.com.you.bean.Usuario;

@WebServlet(urlPatterns = {"/onlinereal"}, asyncSupported=true)
public class OnlineReal extends HttpServlet implements Runnable {

private static HashMap<Integer, Usuario> onlines1 = new HashMap<Integer, Usuario>();
private static HashMap<Integer, Usuario> onlines2 = new HashMap<Integer, Usuario>();


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	
	synchronized (this) {
		Usuario usuariologado = (Usuario) request.getSession().getAttribute("usuariologado");
		
		onlines1.put(usuariologado.getNumero_matricula(),usuariologado);
	}
	
	
	

}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	if(onlines1.size() == 1){
	OnlineReal e = new OnlineReal();
	Thread t = new Thread(e);
	
	t.start();
	}
}



public void run() {
	
	while(true){
		
		//List<Integer> online1 = new ArrayList<Integer>(online1set);

        System.out.println("run");
        
        synchronized (this) {
         
            if(onlines2.size()>0){
                for(Integer matricula: onlines2.keySet()){
                	
                	Usuario verifica = onlines1.get(matricula);
                
                	
                	if (verifica == null){
                		System.out.println(matricula+" esta offline");
                	}

                }
    		}
                
            if(onlines1.size()>0){
           	 	onlines2 = onlines1;
            }
           
            onlines1.clear();
            
            
            try{
                Thread.sleep(5000);
                }catch(InterruptedException e){
                	System.out.println("erro na thead " + e.getMessage());
                }

        }
	}

}

}
[/code]

resolvi troquei isto…

if(onlines1.size()>0){  
                    onlines2 = onlines1;  
                }  

por isto pelo jeito botar para receber direto não da certo :S

if(onlines1.size()>0){
	            	
	            	for(Integer matricula: onlines1.keySet()){
	                	
	            		onlines2.put(matricula, onlines1.get(matricula));

	                }
	          
	            }