import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
class Ideone {
private static final CountDownLatch countDownLatch = new CountDownLatch(2);
private static volatile boolean flag = false;
List
<Runnable
> runnables
= Arrays.
asList(() -> { try {
while (true) {
if (flag) {
countDownLatch.countDown();
System.
out.
println("Second Function"); break;
}
}
}
}, () -> {
try {
System.
out.
println("First Function"); flag = true;
countDownLatch.countDown();
System.
out.
println("End of fast function"); }
});
executeAndWait(runnables);
countDownLatch.await();
System.
out.
println("Main Execution Completed!"); }
private static void executeAndWait(List<Runnable> runnables) {
runnables.
forEach(r
-> new Thread(r
).
start()); }
}
aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwoKY2xhc3MgSWRlb25lIHsKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb3VudERvd25MYXRjaCBjb3VudERvd25MYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgyKTsKICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGZsYWcgPSBmYWxzZTsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgIExpc3Q8UnVubmFibGU+IHJ1bm5hYmxlcyA9IEFycmF5cy5hc0xpc3QoKCkgLT4gewogICAgICB0cnkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKICAgICAgICAgIGlmIChmbGFnKSB7CiAgICAgICAgICAgIGNvdW50RG93bkxhdGNoLmNvdW50RG93bigpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlY29uZCBGdW5jdGlvbiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgIH0KICAgIH0sICgpIC0+IHsKICAgICAgdHJ5IHsKICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcnN0IEZ1bmN0aW9uIik7CiAgICAgICAgZmxhZyA9IHRydWU7CiAgICAgICAgY291bnREb3duTGF0Y2guY291bnREb3duKCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbmQgb2YgZmFzdCBmdW5jdGlvbiIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmbGFnKTsKICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgfQogICAgfSk7CiAgICBleGVjdXRlQW5kV2FpdChydW5uYWJsZXMpOwogICAgY291bnREb3duTGF0Y2guYXdhaXQoKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWFpbiBFeGVjdXRpb24gQ29tcGxldGVkISIpOwogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBleGVjdXRlQW5kV2FpdChMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXMpIHsKICAgIHJ1bm5hYmxlcy5mb3JFYWNoKHIgLT4gbmV3IFRocmVhZChyKS5zdGFydCgpKTsKICB9Cn0=