Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

143
Vistas
¿Es razonable sincronizar en una variable local?

Del modelo de memoria de Java, sabemos que cada subproceso tiene su propia pila de subprocesos y que las variables locales se colocan en la propia pila de subprocesos de cada subproceso.

Y que otros subprocesos no pueden acceder a estas variables locales.

Entonces, ¿en qué caso deberíamos sincronizar las variables locales?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Estás hablando del siguiente caso:

 public class MyClass { public void myMethod() { //Assume Customer is a Class Customer customer = getMyCustomer(); synchronized(customer) { //only one thread at a time can access customer object which ever holds the lock } } }

En el código anterior, customer es una variable de referencia local, pero aún está utilizando un bloque sincronizado para restringir el acceso al objeto al que apunta el customer ( por un solo hilo a la vez ).

En el modelo de memoria de Java, los objetos viven en el montón (aunque las referencias son locales a un subproceso que vive en una pila) y la sincronización se trata de restringir el acceso a un objeto en el montón exactamente un subproceso a la vez.

En resumen, cuando dice variable local (no primitiva), solo la referencia es local, pero no el objeto real en sí, es decir, en realidad se refiere a un objeto en el montón al que pueden acceder muchos otros subprocesos. Debido a esto, necesita sincronización en el objeto para que un solo subproceso solo pueda acceder a ese objeto a la vez.

about 4 years ago · Santiago Trujillo Denunciar

0

Hay dos situaciones:

  1. La variable local es de un tipo primitivo como int o double .
  2. La variable local es de un tipo de referencia como ArrayList .

En la primera situación, no puede sincronizar, ya que solo puede sincronizar en Objetos (a los que apuntan las variables de tipo de referencia).

En la segunda situación, todo depende de a qué apunte la variable local. Si apunta a un objeto al que otros subprocesos (pueden) también apuntar, entonces debe asegurarse de que su código esté correctamente sincronizado.

Ejemplos: asignó la variable local de un campo static o de instancia, o obtuvo el objeto de una colección compartida.

Sin embargo, si el objeto se creó en su subproceso y solo se asignó a esa variable local, y nunca proporciona una referencia a él desde su subproceso a otro subproceso, y la implementación de objetos en sí tampoco proporciona referencias, entonces usted no necesita preocuparse por la sincronización.

about 4 years ago · Santiago Trujillo Denunciar

0

El punto es: la sincronización se realiza con un propósito. Lo usa para asegurarse de que exactamente un subproceso pueda realizar alguna actividad especial digna de protección en un momento dado.

Por lo tanto: si necesita sincronización, siempre se trata de más de un hilo. Y, por supuesto, luego debe bloquear algo a lo que todos esos hilos tengan acceso.

O en otras palabras: no tiene sentido cerrar la puerta con llave para evitar entrar al edificio.

Pero, como señala la otra respuesta: en realidad depende de la definición de variable "local". Digamos que tienes:

 void foo() { final Object lock = new Object(); Thread a = new Thread() { uses lock Thread b = new Thread() { uses lock

entonces seguro, esa variable "local" se puede usar como bloqueo para esos dos hilos. Y más allá de eso: ese ejemplo funciona porque la sincronización ocurre en el monitor de un objeto específico. Y los objetos residen en el montón. Todos ellos.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda