Re[5]: Киллер фича JDK 21 - virtual threads
От: m2user  
Дата: 10.05.23 00:30
Оценка: 7 (1)
M>Мне для получения результата Callable, обернутого в VirtualThread, придется к таким же ухищрениям прибегать, как в той теме?

M>И что насчет перехвата исключений? Перехватывать нужно внутри VirtualThread?


Посмотрел https://openjdk.org/jeps/444
Там есть поясняющий пример:
void handle(Request request, Response response) {
    var url1 = ...
    var url2 = ...
 
    try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
        var future1 = executor.submit(() -> fetchURL(url1));
        var future2 = executor.submit(() -> fetchURL(url2));
        response.send(future1.get() + future2.get());
    } catch (ExecutionException | InterruptedException e) {
        response.fail(e);
    }
}
 
String fetchURL(URL url) throws IOException {
    try (var in = url.openStream()) {
        return new String(in.readAllBytes(), StandardCharsets.UTF_8);
    }
}


По-видимому Executors.newVirtualThreadPerTaskExecutor — предполагаемое решение для обоих случаев.
Но разворачивать ExecutionException до IOException придется вручную
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.