#536 Потокобезопасный шедулер callback-ов
Даны тест и интерфейс, нужно заимплементировать шедулер, чтобы он был потокобезопасный. Executors для этого использовать нельзя.
package ru.artem.papyan.yahello.util;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import ru.artem.papyan.yahello.util.impl.CallbackSchedulerImpl;
import java.time.Instant;
import static org.junit.jupiter.api.Assertions.assertTrue;
class CallbackSchedulerTest {
private CallbackScheduler scheduler;
private static class CallbackResult {
boolean isDone = false;
}
@BeforeEach
void setUp() {
scheduler = new CallbackSchedulerImpl();
}
@AfterEach
void tearDown() throws Exception {
scheduler.close();
}
@Test
void testSimple() throws InterruptedException {
final CallbackResult result = new CallbackResult();
scheduler.schedule(
() -> {
synchronized (result) {
result.isDone = true;
result.notify();
}
},
Instant.now().plusSeconds(2)
);
synchronized (result) {
result.wait();
assertTrue(result.isDone);
}
}
}
package ru.artem.papyan.yahello.util;
import java.time.Instant;
public interface CallbackScheduler extends AutoCloseable {
void schedule(Runnable callback, Instant when);
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору