algo atomic
This commit is contained in:
@@ -4,16 +4,14 @@ import interfaces.AlgoDiffusion;
|
|||||||
import interfaces.Capteur;
|
import interfaces.Capteur;
|
||||||
import interfaces.ObserverDeCapteurAsync;
|
import interfaces.ObserverDeCapteurAsync;
|
||||||
|
|
||||||
import java.time.Clock;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CapteurImpl implements Capteur {
|
public class CapteurImpl implements Capteur {
|
||||||
private int value;
|
private int value = 0;
|
||||||
private AlgoDiffusion diffusion;
|
private AlgoDiffusion diffusion;
|
||||||
protected List<ObserverDeCapteurAsync> observers=new ArrayList<ObserverDeCapteurAsync>();
|
protected List<ObserverDeCapteurAsync> observers=new ArrayList<ObserverDeCapteurAsync>();
|
||||||
private Boolean locker = false;
|
private Boolean locker = false;
|
||||||
public int initTime = 0;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void attach(ObserverDeCapteurAsync o) {
|
public void attach(ObserverDeCapteurAsync o) {
|
||||||
@@ -27,8 +25,8 @@ public class CapteurImpl implements Capteur {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
Clock clockTime = Clock.systemDefaultZone();
|
System.out.println("\t\ttick");
|
||||||
this.value = ((int)clockTime.millis())-initTime;
|
this.value++;
|
||||||
if(!locker){
|
if(!locker){
|
||||||
diffusion.execute();
|
diffusion.execute();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package impl;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
import interfaces.AlgoDiffusion;
|
import interfaces.AlgoDiffusion;
|
||||||
import interfaces.Capteur;
|
import interfaces.Capteur;
|
||||||
@@ -20,8 +22,19 @@ public class DiffusionAtomique implements AlgoDiffusion {
|
|||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
capteur.lock();
|
capteur.lock();
|
||||||
|
Future<?>[] l = new Future<?>[capteur.observers.size()];
|
||||||
|
int i = 0;
|
||||||
for (ObserverDeCapteurAsync canal : capteur.observers) {
|
for (ObserverDeCapteurAsync canal : capteur.observers) {
|
||||||
canal.update();
|
Future<?> f = canal.update();
|
||||||
|
l[i] = f;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
for (Future<?> f : l) {
|
||||||
|
try {
|
||||||
|
f.get();
|
||||||
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
capteur.unlock(); //TODO
|
capteur.unlock(); //TODO
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ public class Scheduler {
|
|||||||
private final ScheduledExecutorService scheduler;
|
private final ScheduledExecutorService scheduler;
|
||||||
|
|
||||||
public Scheduler(int nbCanaux) {
|
public Scheduler(int nbCanaux) {
|
||||||
int nThread = 20+2*nbCanaux;
|
int nThread = 2+2*nbCanaux;
|
||||||
scheduler = Executors.newScheduledThreadPool(nThread);
|
scheduler = Executors.newScheduledThreadPool(nThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import impl.CapteurImpl;
|
|||||||
import impl.DiffusionAtomique;
|
import impl.DiffusionAtomique;
|
||||||
import impl.Scheduler;
|
import impl.Scheduler;
|
||||||
import interfaces.AlgoDiffusion;
|
import interfaces.AlgoDiffusion;
|
||||||
import java.time.*;
|
|
||||||
|
|
||||||
|
|
||||||
public class main {
|
public class main {
|
||||||
@@ -20,8 +19,6 @@ public class main {
|
|||||||
Scheduler scheduler = new Scheduler(NB_CANAUX);
|
Scheduler scheduler = new Scheduler(NB_CANAUX);
|
||||||
CapteurImpl c = new CapteurImpl();
|
CapteurImpl c = new CapteurImpl();
|
||||||
|
|
||||||
Clock clockTime = Clock.systemDefaultZone();
|
|
||||||
c.initTime = ((int)clockTime.millis());
|
|
||||||
DiffusionAtomique algo = new DiffusionAtomique();
|
DiffusionAtomique algo = new DiffusionAtomique();
|
||||||
algo.capteur = c;
|
algo.capteur = c;
|
||||||
c.setAlgoDiffusion(algo);
|
c.setAlgoDiffusion(algo);
|
||||||
|
|||||||
Reference in New Issue
Block a user