Cómo puedo establecer 'attributes
' al actual Thread
en Java, quiero establecer pares clave-valor y obtener el valor en otro lugar, pero en el mismo subproceso. me gusta esto http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.htmlAgregar atributos al actual Java Thread
Respuesta
No creo que pueda agregar atributos a un hilo dado en Java, pero podría usar una instancia ThreadLocal
para almacenar cualquier información especial por hilo.
http://download.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html
Aquí es código de ejemplo para la respuesta de @ edalorzo:
import java.util.HashMap;
import java.util.Map;
public class ThreadAttributes {
private static ThreadLocal<Map<String, String>> threadAttrs = new ThreadLocal<Map<String, String>>() {
@Override
protected Map<String, String> initialValue() {
return new HashMap<String, String>();
}
};
public static String get(String key) {
return threadAttrs.get().get(key);
}
public static void set(String key, String value) {
threadAttrs.get().put(key, value);
}
}
Para usarlo simplemente esto:
ThreadAttributes.get("attribute"); //to get an attribute
ThreadAttributes.set("attribute", "toValue"); //to set an attribute
Advertencia: si la aplicación crea hilos de lotes y no reutiliza ellas este código potencialmente perderá HashMap
s.
Por otro lado, las variables ThreadLocal tienden a tener problemas con los grupos de subprocesos, ya que cuando se reutiliza una banda de rodadura del grupo, se le asignará la misma variable local de subprocesos que la última vez que se usó. Por lo tanto, es importante verificar que esto no sea un problema. –
Eso es muy cierto. Supongo que realmente depende de cuál es el requisito. Si necesita atributos que tengan un alcance de tarea ('Runnable # run()' -scoped, por ejemplo), puede valer la pena consultar el código fuente de Google Guice framework, que le permite ubicar instancias. – rodion
- 1. Agregar atributos personalizados al control asp.NET RadioButton
- 2. java: list thread locals?
- 3. ¿Es seguro Java Regex Thread?
- 4. thread state java
- 5. Java XPathFactory thread-safety
- 6. Java StringBuilder and Thread Safety
- 7. Java Thread wait() => bloqueado?
- 8. Thread Safe Singletons en Java
- 9. Java Thread - Thread Thread.interrupted() y future.cancel (true) behavior
- 10. ¿Por qué no puede agregar atributos al objeto en python?
- 11. Agregar atributos personalizados al componente de autocompletado Primefaces en JSF
- 12. ¿Cómo agregar atributos correctamente al renderizar con HtmlTextWriter?
- 13. ¿Puedo agregar atributos al objeto 'ventana' en javascript?
- 14. Java Thread cada X segundos
- 15. Simple Thread Management - Java - Android
- 16. Timer & TimerTask versus Thread + sleep en Java
- 17. std :: thread detect principal thread
- 18. Cómo agregar atributos XmlInclude dinámicamente
- 19. Método del hilo actual java
- 20. Cómo agregar al valor actual en MySQL DB
- 21. ¿Cómo obtener acceso al JUnitCore actual para agregar un oyente?
- 22. Agregar el directorio actual al classpath de un archivo JAR
- 23. ¿Agregar atributos personalizados usando mono.cecil?
- 24. Estado actual de soporte drd y helgrind para std :: thread
- 25. Java ExecutorService callback on thread terminte
- 26. Java: Agregar desplazamiento al área de texto
- 27. Java NullPointerException al agregar a ArrayList?
- 28. Java Thread Management y Application Flow
- 29. atributos abstractos en Java
- 30. Java Thread - Errores de consistencia de memoria
Esto es exactamente como se hace en log4j MDC, y también el contexto de transacción de EJB y el contexto de seguridad se realiza de la misma manera durante una solicitud: esta es una de las razones por las que EJB prohíbe iniciar subprocesos propios. –