Как говорили люди в комментариях, проблема в том, что вы не дожидаетесь завершения потоков.Вы возвращаетесь с handleRequest()
, как только закончите, начав темы.Это говорит Lambda о том, что ваше выполнение завершено, поэтому он приостанавливает ваш контейнер до того, как эти потоки получат возможность выполнить.
«Приостановляет ваш контейнер» - это разница между выполнением в Lambda и локальным.Когда вы запускаете локально, JVM фактически завершается, и он не будет этого делать, пока не завершатся все потоки, не являющиеся демонами.
Чтобы убедиться, что все потоки запущены, вам необходимо явно вызвать присоединение к ним перед возвратом из обработчика.function.
Чтобы помочь вам понять, как это работает, вам также следует добавить дополнительную отладочную информацию (используйте System.err
, потому что она не буферизована):
@Override
public String handleRequest(Object input, Context context) {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.err.println("Hello from " + Thread.currentThread().getName());
}
};
Thread thread1 = new Thread(runnable);
thread1.start();
Thread thread2 = new Thread(runnable);
thread2.start();
Thread thread3 = new Thread(runnable);
thread3.start();
Thread thread4 = new Thread(runnable);
thread4.start();
thread1.join();
thread2.join();
thread3.join();
thread4.join();
System.err.println("handler function exiting");
}}