es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor ThreadLocal no se borra para el siguiente hilo en Java.

Estoy ejecutando un servicio web que recibe al menos 200 solicitudes por segundo. Dependiendo de la acción, proporcionamos acceso root para algunas operaciones y usamos el siguiente código.

El método getCurrentRunner() devolverá el llamante real basado en la solicitud. El problema es que una de cada 200 solicitudes devuelve “root” en lugar del llamante real.

Una cosa que noté es que en lugar de usar threadlocal.remove(), establecí ese valor como nulo. Esperando que la condición rootContext.get() != null fallara y devolviera el llamante real.

¿Cómo resolver esto? ¿Establecer rootContext.remove() resolverá esto? Si es así, ¿cómo?

Gracias por la ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Java, seguridad de hilos y hilos locales, recomendaría el uso de rootContext.remove() para solucionar el problema de que una de cada 200 solicitudes devuelva root en lugar del llamante real.

    Como se indica en el código, cuando se llama a rootAccess(), se ejecuta rootContext.set("root") y luego se establece el valor en null en el mismo método. Sin embargo, rootContext.set(null) no elimina el valor del objeto ThreadLocal, sino que establece el valor en null. Por lo tanto, cuando se llama a getRunner(), la condición rootContext.get()! = null aún puede evaluarse como verdadera y devolver root en lugar del llamante real.

    Para solucionar esto, en lugar de establecer el valor en null, utilice rootContext.remove() para eliminar el valor del objeto ThreadLocal. Esto asegurará que getRunner() no recupere un valor anterior que ya no sea relevante y devolverá el llamante real cada vez.

    En resumen, cambiar rootContext.set(null) a rootContext.remove() en el método rootAccess() debería resolver el problema de devolver root en lugar del llamante real en una de cada 200 solicitudes.

Comments are closed.