/*
* Copyright 2011 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.x38.util;
import java.util.concurrent.atomic.AtomicLong;
/**
*
* Almacena datos en un espacio de memoria independiente por cada hilo.
*
* @author UDA
*
*/
public class ThreadStorageManager {
//-9223372036854775808
//9223372036854775807
private static final AtomicLong uniqueId = new AtomicLong(0);
private static ThreadLocal < Long > uniqueNum =
new ThreadLocal < Long > () {
@Override protected Long initialValue() {
return uniqueId.getAndIncrement();
}
};
/**
* Asigna un valor predefinido al Thread Local.
*
* @param uniqueIdentificator
*/
public static void setCurrentThreadId(Long uniqueIdentificator){
uniqueId.lazySet(uniqueIdentificator);
}
/**
* Devuelve el valor almacenado por cada hilo. Si dicho valor no se ha inicializado, lo inicializa.
*
* @return valor que se almacenapor cada hilo
*/
public static long getCurrentThreadId() {
return uniqueNum.get();
}
/**
* Borra el espacio de memoria asociado al hilo.
*/
public static void clearCurrentThreadId(){
uniqueNum.remove();
}
}