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.

¿Son seguros los CompletableFutures en hilos?

Tengo un hilo que invoca a dos hilos separados. Pasa la misma CompletableFuture a ambos hilos secundarios. ¿Si .get() se llamara en ambos hilos al mismo tiempo, tendría algún problema de concurrencia?

¿Podría corromper el CompletableFuture?
¿Es posible que no vea los últimos cambios realizados en el objeto devuelto por .get()?
¿Qué sucede si modifico ese objeto después?

Como ejemplo concreto, en el siguiente código, ¿sería posible que los dos hilos impriman un valor diferente, suponiendo que nada cambie el objeto devuelto por cfInput.get() después de que se complete cfInput?

“`
public void mainClass(CompletableFuture<obja> cfInput){
class1.doAsync1(cfInput);
class2.doAsync2(cfInput);
}

@Async
public void doAsync1(CompletableFuture<obja> cfInput){
//lógica
System.out.println(cfInput.get().getObjB().getBlah());
//lógica
}

@Async
public void doAsync2(CompletableFuture<obja> cfInput){
//lógica
System.out.println(cfInput.get().getObjB().getBlah());
//lógica
}

public class ObjA{
private ObjB objB;
public ObjB getObjB();
public void setObjB();
}
public class ObjB{
private String blah;
public String getBlah();
public void setBlah();
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es posible que los dos hilos impriman un valor diferente, dependiendo de la implementación de CompletableFuture. Si el CompletableFuture no es seguro para hilos, entonces es posible que los dos hilos no vean el mismo valor. También es posible que el objeto devuelto por .get() sea modificado después de que cfInput se haya completado, lo que podría llevar a imprimir valores diferentes.

Comments are closed.