Skip to content

Commit 8998f3b

Browse files
SentryManrbygrave
andauthored
[Http-Client] Use virtual thread executor by default (#442)
* use virtual thread executor by default * only try if > 21 * [Http client] #442 extract helper method for newVirtualThreadPerTaskExecutor --------- Co-authored-by: Rob Bygrave <[email protected]>
1 parent 5e44ea3 commit 8998f3b

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

http-client/src/main/java/io/avaje/http/client/DHttpClientBuilder.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616
import java.util.List;
1717
import java.util.Optional;
1818
import java.util.concurrent.Executor;
19+
import java.util.concurrent.ExecutorService;
20+
import java.util.concurrent.Executors;
1921
import java.util.function.Function;
2022

2123
import static java.util.Objects.requireNonNull;
2224

25+
import java.lang.invoke.MethodHandles;
26+
import java.lang.invoke.MethodType;
27+
2328
final class DHttpClientBuilder implements HttpClient.Builder, HttpClient.Builder.State {
2429

2530
private java.net.http.HttpClient client;
@@ -99,6 +104,8 @@ private java.net.http.HttpClient defaultClient() {
99104
}
100105
if (executor != null) {
101106
builder.executor(executor);
107+
} else if (Integer.getInteger("java.specification.version") >= 21) {
108+
builder.executor(virtualThreadExecutor());
102109
}
103110
if (proxy != null) {
104111
builder.proxy(proxy);
@@ -118,6 +125,17 @@ private java.net.http.HttpClient defaultClient() {
118125
return builder.build();
119126
}
120127

128+
private static ExecutorService virtualThreadExecutor() {
129+
try {
130+
return (ExecutorService)
131+
MethodHandles.lookup()
132+
.findStatic(Executors.class, "newVirtualThreadPerTaskExecutor", MethodType.methodType(ExecutorService.class))
133+
.invokeExact();
134+
} catch (Throwable e) {
135+
return null;
136+
}
137+
}
138+
121139
/**
122140
* Create a reasonable default BodyAdapter if avaje-jsonb or Jackson are present.
123141
*/

0 commit comments

Comments
 (0)