tengo una duda con la sincronizacion. aqui tengo una pregunta de un examen test y no estoy seguro de cual es la respuesta porque no tengo experiencia aun aver si alguien me echa una mano!!
dado el siguiente servidor
Código:
public class Servidor extends IServidor implements UnicastRemoteObject {
HashMap<String, Integer> productosOrdenados;
public Servidor(){
...Constructor...
}
public insert(String ordenID){
...
}
}
cual de las siguientes llamadas del cliente al metodo insert es correcta¿?¿?¿?
Código:
1. public insert(String ordenID){
synchronized(productosOrdenados) {
if(productosOrdenados.contains(ordenId)){
productosOrdenados.put(ordenID, productosOrdenados.get(ordenId)++);
} else {
productosOrdenados.put(ordenID, 1);
}
}
}
______________________________-
2. Ninguna de las otras opciones
________________________________-
3. public insert(String ordenID){
synchronized(this) {
if(productosOrdenados.contains(ordenId)){
int val = productosOrdenados.get(ordenId);
productosOrdenados.put(ordenID, ++val);
} else {
productosOrdenados.put(ordenID, 1);
}
}
}
___________________________-
4. public insert(String ordenID){
if(productosOrdenados.contains(ordenId)){
synchronized(productosOrdenados) {
productosOrdenados.put(ordenID, productosOrdenados.get(ordenId)++);
}
} else {
synchronized(productosOrdenados) {
productosOrdenados.put(ordenID, 1);
}
}
}
}
yo creo que la respuesta incorrecta es la 2 porque las llamadas me parece que hacen buen uso del synchronized.
que pensais vosotros???