import java.util.*;
import java.util.concurrent.*;
import java.lang.*;
import java.io.*;
// J'ai mocké ta classe Directory
class Directory {
private static Map
<String, String
> map
= Collections.
synchronizedMap(new HashMap
<>());
map.put(key, value);
}
public Map
<String, String
> getMap
(){ return map;
}
}
class DemoClients {
public final static int SIZE = 3; // Nombre de client
Directory d = new Directory(); // <=> Naming.lookup("rmi://localhost/directory");
// L'action que doit effectuer chacun de tes clients est représenté par un callable
Callable<Object>[] callables = new Callable[SIZE];
for(int i = 0; i < SIZE; i++){
final int i2 = i;
callables[i] = () -> {
d.put("name"+i2, "value"+i2);
return null;
};
}
// Exécution des actions de tes clients via un pool de thread (cf: non-séquentiel)
ExecutorService es = Executors.newFixedThreadPool(SIZE);
es.
invokeAll(Arrays.
asList(callables
)); es.shutdown();
// Affichage
for (Map.
Entry<String, String
> e
: d.
getMap().
entrySet()) { System.
out.
println("Key : " + e.
getKey() + " Value : " + e.
getValue()); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuKjsKaW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5pby4qOwoKLy8gSidhaSBtb2Nrw6kgdGEgY2xhc3NlIERpcmVjdG9yeQpjbGFzcyBEaXJlY3RvcnkgewogICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRNYXAobmV3IEhhc2hNYXA8PigpKTsKCQogICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSl7CiAgICAgICAgbWFwLnB1dChrZXksIHZhbHVlKTsKICAgIH0KCQkKICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldE1hcCgpewogICAgICAgIHJldHVybiBtYXA7CiAgICB9Cn0KCQkKY2xhc3MgRGVtb0NsaWVudHMgewogICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU0laRSA9IDM7IC8vIE5vbWJyZSBkZSBjbGllbnQKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewogICAgICAgIERpcmVjdG9yeSBkID0gbmV3IERpcmVjdG9yeSgpOyAvLyA8PT4gTmFtaW5nLmxvb2t1cCgicm1pOi8vbG9jYWxob3N0L2RpcmVjdG9yeSIpOwoJCQogICAgICAgIC8vIEwnYWN0aW9uIHF1ZSBkb2l0IGVmZmVjdHVlciBjaGFjdW4gZGUgdGVzIGNsaWVudHMgZXN0IHJlcHLDqXNlbnTDqSBwYXIgdW4gY2FsbGFibGUKICAgICAgICBDYWxsYWJsZTxPYmplY3Q+W10gY2FsbGFibGVzID0gbmV3IENhbGxhYmxlW1NJWkVdOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspewogICAgICAgICAgICBmaW5hbCBpbnQgaTIgPSBpOyAKICAgICAgICAgICAgY2FsbGFibGVzW2ldID0gKCkgLT4gewogICAgICAgICAgICAgICAgZC5wdXQoIm5hbWUiK2kyLCAidmFsdWUiK2kyKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9OwogICAgICAgIH0KCQkKICAgICAgICAvLyBFeMOpY3V0aW9uIGRlcyBhY3Rpb25zIGRlIHRlcyBjbGllbnRzIHZpYSB1biBwb29sIGRlIHRocmVhZCAoY2Y6IG5vbi1zw6lxdWVudGllbCkKICAgICAgICBFeGVjdXRvclNlcnZpY2UgZXMgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKFNJWkUpOwogICAgICAgIGVzLmludm9rZUFsbChBcnJheXMuYXNMaXN0KGNhbGxhYmxlcykpOwogICAgICAgIGVzLnNodXRkb3duKCk7CiAgICAgICAgCiAgICAgICAgLy8gQWZmaWNoYWdlIAogICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlIDogZC5nZXRNYXAoKS5lbnRyeVNldCgpKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiS2V5IDogIiArIGUuZ2V0S2V5KCkgKyAiIFZhbHVlIDogIiArIGUuZ2V0VmFsdWUoKSk7CiAgICAgICAgfQogICAgfQp9