bloque sincronizar con 2 objetos no funciona

Estoy probando un código donde tengo 2 métodos y una declaración en cada método está sincronizada.

private final Object obj1 = new Object();
private final Object obj2 = new Object();

public void method1(int result)
{
 //there's a loop to create delay

 synchronized (obj1){
   sum = sum + result;
 }

 //there's a loop to create delay

}


public void method2(int result)
{
  //there's a loop to create delay

 synchronized (obj2){
   sum = sum - result;
 }

 //there's a loop to create delay

}

Lo que básicamente estoy haciendo es agregar un resultado a la suma, restar la misma cantidad y luego imprimir la suma. Entonces mi cantidad inicial y final debe ser constante.

El problema es que no sé por qué la cantidad final no es la misma que la cantidad inicial cuando uso 2 objetos diff como bloqueo. SIN EMBARGO, es constante cuando uso 'este' objeto como bloqueo para ambas declaraciones. Pero usar 'this' como objeto no aceleró el tiempo de ejecución que usar el método sincronizado.

Todavía soy nuevo en el concepto de sincronización, por lo que agradezco cualquier ayuda.

Respuesta 1

Tengo un diseño de actividad que llama a otro archivo xml como encabezado. Me gustaría obtener una referencia por id de una vista de imagen establecida en nav_header_main, pero no puedo alcanzarla. actividad_principal: <...

Posible duplicado: ¿Cómo hacer una consulta de límite en HQL? Tengo una tabla A de tamaño grande pero desconocido. Necesito recuperar resultados en lotes, es decir, 100 a la vez, de la tabla y realizar operaciones ...

Hice un proyecto simple en NetBeans 8.2 y, por alguna razón, ganó ejecutar mi proyecto. El símbolo del botón de ejecución no se puede hacer clic. He hecho clic en Ejecutar en la barra de menú pero todavía no funciona para ...

Escribiré primero todo el problema. Un anillo es una colección de artículos que tiene una referencia a un artículo actual. Una operación, llamémosla avance, mueve la referencia al siguiente elemento en ...