Foro de elhacker.net

Programación => Java => Mensaje iniciado por: alfonsoair en 30 Enero 2019, 21:20 pm



Título: Synchronisable y listeners
Publicado por: alfonsoair en 30 Enero 2019, 21:20 pm
Alguien puede ayudarme a resolver esta clase o con algunos link que me ayuden a saber como resolverla???

public interface Synchronisable
{
public long getTimestamp();
public String getId();
}

public interface SynchronisedDataListener
{
public void processSynchronisedData(long timestamp, Set<Synchronisable> data);
}

public class DataSynchroniser
{

private SynchronisedDataListener listener;

public void addToSynchroniseSet(String id)
{
}

public void processData(Synchronisable data)
{
}

public void removeFromSynchroniseSet(String id)
{
}
}


Título: Re: Synchronisable y listeners
Publicado por: rub'n en 30 Enero 2019, 21:33 pm
Que tal hommie usa Geshi,

(https://3.bp.blogspot.com/-O6qDroNEzts/W8sWHPnV3MI/AAAAAAAADJw/mypp_PTYxbA_uKr7E-O-x0epDjSUdk3mwCK4BGAYYCw/s1600/geshi.gif)

que patron intentas hacer? Observer/Observable ?

tanto removeFromSynchroniseSet y addToSynchroniseSet deberían de tener la palabra clave synchronized

Código
  1. public synchronized void addToSynchroniseSet(String id)

Código
  1. public synchronized void removeFromSynchroniseSet(String id)

Indica que cada hilo o multiples, deben acceder o remover un recurso compartido de manera sincronizada uno tras otro, evitando problemas de concurrencia en lo posible, pero el abuso de estos produce otros efectos secundarios como dead locks.



Título: Re: Synchronisable y listeners
Publicado por: alfonsoair en 30 Enero 2019, 21:37 pm
Hola,

SI estoy intentado hacer un observable alguna sugerencia adicional?


Título: Re: Synchronisable y listeners
Publicado por: rub'n en 30 Enero 2019, 21:49 pm
https://github.com/rucko24/MVP/blob/da986a086c11b8118470cf323ece9bf6be29281c/src/main/java/com/Core/vaadin/arduino/broadcaster/Broadcaster.java

uno de hace tiempo


Código
  1. public class Broadcaster implements Serializable {
  2.  
  3. private static ExecutorService executorService = Executors.newSingleThreadExecutor();
  4. private static LinkedList<BroadcasterListener> listeners = new LinkedList<BroadcasterListener>();
  5.  
  6. public interface BroadcasterListener {
  7. void recibirBroadcast( String message , boolean value);
  8. }
  9.  
  10. public static synchronized void register(BroadcasterListener listener) {
  11. listeners.add(listener);
  12. }
  13.  
  14. public static synchronized void unregister(BroadcasterListener listener) {
  15. listeners.remove(listener);
  16. }
  17.  
  18. public static synchronized void broadcast( final String menssage, boolean value) {
  19. for(final BroadcasterListener listener : listeners ) {
  20. executorService.execute(() -> {
  21.  
  22. listener.recibirBroadcast(menssage, value);
  23.  
  24. });
  25. }
  26. }
  27.  
  28. }

La clase que quieres que reciba y envié los cambios a las demás debe implementar a

Código
  1.  
  2. public TuClase implements Broadcaster.BroadcasterListener {
  3.  
  4.    public TuClase() {
  5.  
  6.        Broadcaster.register(this);  
  7.    }
  8.  
  9.    @Override
  10.    public void recibirBroadcast(String message, boolean value) {
  11.  
  12.  
  13.    }
  14.  
  15. }
  16.  



- Debes Implementar el método recibirBroadcast()
- Remover también los objetos atachados a la lista por medio del Broadcaster.unregister(this);


Este no es el ejemplo definitivo pero te puede ayudar a tu implementación