import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main {
private static final ExecutorService EXECUTOR = Executors.newCachedThreadPool();
private static Callable<String> STAGE_1 = new Callable<String>() {
@Override
return "Step1";
}
};
private static class Stage2 implements Callable<String> {
private final Future<String> step1;
private final int subType;
public Stage2(Future<String> step1, int subType) {
this.step1 = step1;
this.subType = subType;
}
@Override
return step1.get() + " " + subType;
}
}
Future<String> step1Result = EXECUTOR.submit(STAGE_1);
List<Stage2> list = new ArrayList<Stage2>(5);
for (int i = 0; i < 5; i++) {
list.add(new Stage2(step1Result, i));
}
List<Future<String>> step2Results = EXECUTOR.invokeAll(list);
for (Future<String> result : step2Results) {
System.
out.
println(result.
get()); }
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxlOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBFWEVDVVRPUiA9IEV4ZWN1dG9ycy5uZXdDYWNoZWRUaHJlYWRQb29sKCk7CgogICAgcHJpdmF0ZSBzdGF0aWMgQ2FsbGFibGU8U3RyaW5nPiBTVEFHRV8xID0gbmV3IENhbGxhYmxlPFN0cmluZz4oKSB7CiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIFN0cmluZyBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKICAgICAgICAgICAgcmV0dXJuICJTdGVwMSI7CiAgICAgICAgfQogICAgfTsKCiAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdGFnZTIgaW1wbGVtZW50cyBDYWxsYWJsZTxTdHJpbmc+IHsKICAgICAgICBwcml2YXRlIGZpbmFsIEZ1dHVyZTxTdHJpbmc+IHN0ZXAxOwogICAgICAgIHByaXZhdGUgZmluYWwgaW50IHN1YlR5cGU7CgogICAgICAgIHB1YmxpYyBTdGFnZTIoRnV0dXJlPFN0cmluZz4gc3RlcDEsIGludCBzdWJUeXBlKSB7CiAgICAgICAgICAgIHRoaXMuc3RlcDEgPSBzdGVwMTsKICAgICAgICAgICAgdGhpcy5zdWJUeXBlID0gc3ViVHlwZTsKICAgICAgICB9CgogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBTdHJpbmcgY2FsbCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICByZXR1cm4gc3RlcDEuZ2V0KCkgKyAiICIgKyBzdWJUeXBlOwogICAgICAgIH0KICAgIH0KCgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgRnV0dXJlPFN0cmluZz4gc3RlcDFSZXN1bHQgPSBFWEVDVVRPUi5zdWJtaXQoU1RBR0VfMSk7CiAgICAgICAgTGlzdDxTdGFnZTI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0YWdlMj4oNSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAgICAgbGlzdC5hZGQobmV3IFN0YWdlMihzdGVwMVJlc3VsdCwgaSkpOwogICAgICAgIH0KICAgICAgICBMaXN0PEZ1dHVyZTxTdHJpbmc+PiBzdGVwMlJlc3VsdHMgPSBFWEVDVVRPUi5pbnZva2VBbGwobGlzdCk7CiAgICAgICAgZm9yIChGdXR1cmU8U3RyaW5nPiByZXN1bHQgOiBzdGVwMlJlc3VsdHMpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdC5nZXQoKSk7CiAgICAgICAgfQogICAgfQp9Cg==