import static java.util.concurrent.TimeUnit.MILLISECONDS;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.locks.LockSupport;
public class Main {
public class Scheduler {
int initialDelay = 500, interval = 1000, timeout = 4000;
public void scheduleFunction
(Runnable function
) { final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(function, initialDelay, interval, MILLISECONDS);
scheduler.schedule(() -> scheduler.shutdown(), timeout, MILLISECONDS);
try {
scheduler.
awaitTermination(Long.
MAX_VALUE, MILLISECONDS
); Thread.
currentThread().
interrupt(); }
}
}
Scheduler scheduler = new Scheduler();
public void sendToKafka() {
scheduler.scheduleFunction(this::produce);
}
void produce() {
System.
out.
println("produce()"); LockSupport.parkNanos(1_500_000_000);
System.
out.
println("produce() end"); }
public static void main
(String[] args
) { new Main().sendToKafka();
System.
out.
println("main end"); }
}
CmltcG9ydCBzdGF0aWMgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQuTUlMTElTRUNPTkRTOwoKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2tTdXBwb3J0OwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIGNsYXNzIFNjaGVkdWxlciB7CiAgICAgICAgaW50IGluaXRpYWxEZWxheSA9IDUwMCwgaW50ZXJ2YWwgPSAxMDAwLCB0aW1lb3V0ID0gNDAwMDsKCiAgICAgICAgcHVibGljIHZvaWQgc2NoZWR1bGVGdW5jdGlvbihSdW5uYWJsZSBmdW5jdGlvbikgewogICAgICAgICAgICBmaW5hbCBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2Ugc2NoZWR1bGVyID0gRXhlY3V0b3JzLm5ld1NjaGVkdWxlZFRocmVhZFBvb2woMSk7CiAgICAgICAgICAgIHNjaGVkdWxlci5zY2hlZHVsZUF0Rml4ZWRSYXRlKGZ1bmN0aW9uLCBpbml0aWFsRGVsYXksIGludGVydmFsLCBNSUxMSVNFQ09ORFMpOwogICAgICAgICAgICBzY2hlZHVsZXIuc2NoZWR1bGUoKCkgLT4gc2NoZWR1bGVyLnNodXRkb3duKCksIHRpbWVvdXQsIE1JTExJU0VDT05EUyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBzY2hlZHVsZXIuYXdhaXRUZXJtaW5hdGlvbihMb25nLk1BWF9WQUxVRSwgTUlMTElTRUNPTkRTKTsKICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgU2NoZWR1bGVyIHNjaGVkdWxlciA9IG5ldyBTY2hlZHVsZXIoKTsKCiAgICBwdWJsaWMgdm9pZCBzZW5kVG9LYWZrYSgpIHsKICAgICAgICBzY2hlZHVsZXIuc2NoZWR1bGVGdW5jdGlvbih0aGlzOjpwcm9kdWNlKTsKICAgIH0KCiAgICB2b2lkIHByb2R1Y2UoKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcm9kdWNlKCkiKTsKICAgICAgICBMb2NrU3VwcG9ydC5wYXJrTmFub3MoMV81MDBfMDAwXzAwMCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcm9kdWNlKCkgZW5kIik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIG5ldyBNYWluKCkuc2VuZFRvS2Fma2EoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1haW4gZW5kIik7CiAgICB9Cn0K