From 0bd4d554d8a058cdc55325b022b886c7a0f90835 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sat, 24 Jan 2026 14:57:30 +0100 Subject: [PATCH] Use virtual threads --- graalvm-config-dir/reachability-metadata.json | 14 ++++++++++++++ graalvm-config-dir/resource-config.json | 2 +- .../asamk/signal/manager/internal/JobExecutor.java | 2 +- .../asamk/signal/manager/internal/ManagerImpl.java | 2 +- .../org/asamk/signal/http/HttpServerHandler.java | 2 +- .../org/asamk/signal/jsonrpc/JsonRpcReader.java | 4 ++-- .../org/asamk/signal/jsonrpc/SocketHandler.java | 2 +- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/graalvm-config-dir/reachability-metadata.json b/graalvm-config-dir/reachability-metadata.json index 7716884f..ebd13425 100644 --- a/graalvm-config-dir/reachability-metadata.json +++ b/graalvm-config-dir/reachability-metadata.json @@ -212,6 +212,17 @@ } ] }, + { + "type": "com.sun.crypto.provider.HKDFKeyDerivation$HKDFSHA384", + "methods": [ + { + "name": "", + "parameterTypes": [ + "javax.crypto.KDFParameters" + ] + } + ] + }, { "type": "com.sun.crypto.provider.HmacCore$HmacSHA256", "methods": [ @@ -1006,6 +1017,9 @@ } ] }, + { + "type": "java.lang.VirtualThread" + }, { "type": "java.lang.annotation.Retention", "methods": [ diff --git a/graalvm-config-dir/resource-config.json b/graalvm-config-dir/resource-config.json index 0c8e4130..9382426c 100644 --- a/graalvm-config-dir/resource-config.json +++ b/graalvm-config-dir/resource-config.json @@ -1 +1 @@ -{"resources":{"includes":[{"pattern":"com/google/i18n/phonenumbers/data/.*"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/nfc.nrm\\E"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/uprops.icu\\E"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfc.nrm\\E"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E"},{"pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E"},{"pattern":"java.base:\\Qsun/net/www/content-types.properties\\E"},{"pattern":"java.base:\\Qsun/text/resources/LineBreakIteratorData\\E"}]},"bundles":[{"name":"net.sourceforge.argparse4j.internal.ArgumentParserImpl","locales":["de","en","und"]}],"globs":[{"glob":"META-INF/maven/org.xerial/sqlite-jdbc/pom.properties"},{"glob":"META-INF/services/ch.qos.logback.classic.spi.Configurator"},{"glob":"META-INF/services/com.sun.net.httpserver.spi.HttpServerProvider"},{"glob":"META-INF/services/java.lang.System$LoggerFinder"},{"glob":"META-INF/services/java.net.spi.InetAddressResolverProvider"},{"glob":"META-INF/services/java.net.spi.URLStreamHandlerProvider"},{"glob":"META-INF/services/java.nio.channels.spi.SelectorProvider"},{"glob":"META-INF/services/java.nio.file.spi.FileTypeDetector"},{"glob":"META-INF/services/java.sql.Driver"},{"glob":"META-INF/services/java.time.zone.ZoneRulesProvider"},{"glob":"META-INF/services/java.util.spi.ResourceBundleControlProvider"},{"glob":"META-INF/services/kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader"},{"glob":"META-INF/services/kotlin.reflect.jvm.internal.impl.resolve.ExternalOverridabilityCondition"},{"glob":"META-INF/services/kotlin.reflect.jvm.internal.impl.util.ModuleVisibilityHelper"},{"glob":"META-INF/services/org.freedesktop.dbus.spi.message.ISocketProvider"},{"glob":"META-INF/services/org.freedesktop.dbus.spi.transport.ITransportProvider"},{"glob":"META-INF/services/org.slf4j.spi.SLF4JServiceProvider"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_XK"},{"glob":"jni/x86_64-Linux/libjffi-1.2.so"},{"glob":"kotlin/annotation/annotation.kotlin_builtins"},{"glob":"kotlin/collections/collections.kotlin_builtins"},{"glob":"kotlin/coroutines/coroutines.kotlin_builtins"},{"glob":"kotlin/internal/internal.kotlin_builtins"},{"glob":"kotlin/jvm/jvm.kotlin_builtins"},{"glob":"kotlin/kotlin.kotlin_builtins"},{"glob":"kotlin/ranges/ranges.kotlin_builtins"},{"glob":"kotlin/reflect/reflect.kotlin_builtins"},{"glob":"libsignal_jni.so"},{"glob":"libsignal_jni_aarch64.dylib"},{"glob":"libsignal_jni_amd64.dylib"},{"glob":"libsignal_jni_amd64.so"},{"glob":"libsignal_jni_testing.so"},{"glob":"libsignal_jni_testing_amd64.so"},{"glob":"net/sourceforge/argparse4j/internal/ArgumentParserImpl.properties"},{"glob":"net/sourceforge/argparse4j/internal/ArgumentParserImpl_fr.properties"},{"glob":"net/sourceforge/argparse4j/internal/ArgumentParserImpl_fr_FR.properties"},{"glob":"org/asamk/signal/manager/config/ias.store"},{"glob":"org/asamk/signal/manager/config/whisper.store"},{"glob":"org/slf4j/impl/StaticLoggerBinder.class"},{"glob":"org/sqlite/native/Linux/x86_64/libsqlitejdbc.so"},{"glob":"signal_jni.dll"},{"glob":"signal_jni_amd64.dll"},{"glob":"sqlite-jdbc.properties"},{"module":"java.base","glob":"jdk/internal/icu/impl/data/icudt76b/nfc.nrm"},{"module":"java.base","glob":"jdk/internal/icu/impl/data/icudt76b/nfkc.nrm"},{"module":"java.base","glob":"jdk/internal/icu/impl/data/icudt76b/uprops.icu"},{"module":"java.base","glob":"sun/net/idn/uidna.spp"}]} +{"resources":{"includes":[{"pattern":"com/google/i18n/phonenumbers/data/.*"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/nfc.nrm\\E"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/uprops.icu\\E"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfc.nrm\\E"},{"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E"},{"pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E"},{"pattern":"java.base:\\Qsun/net/www/content-types.properties\\E"},{"pattern":"java.base:\\Qsun/text/resources/LineBreakIteratorData\\E"}]},"bundles":[{"name":"net.sourceforge.argparse4j.internal.ArgumentParserImpl","locales":["de","en","und"]}],"globs":[{"glob":"META-INF/maven/org.xerial/sqlite-jdbc/pom.properties"},{"glob":"META-INF/services/ch.qos.logback.classic.spi.Configurator"},{"glob":"META-INF/services/com.sun.net.httpserver.spi.HttpServerProvider"},{"glob":"META-INF/services/java.lang.System$LoggerFinder"},{"glob":"META-INF/services/java.net.spi.InetAddressResolverProvider"},{"glob":"META-INF/services/java.net.spi.URLStreamHandlerProvider"},{"glob":"META-INF/services/java.nio.channels.spi.SelectorProvider"},{"glob":"META-INF/services/java.nio.file.spi.FileTypeDetector"},{"glob":"META-INF/services/java.sql.Driver"},{"glob":"META-INF/services/java.time.zone.ZoneRulesProvider"},{"glob":"META-INF/services/java.util.spi.ResourceBundleControlProvider"},{"glob":"META-INF/services/kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader"},{"glob":"META-INF/services/kotlin.reflect.jvm.internal.impl.resolve.ExternalOverridabilityCondition"},{"glob":"META-INF/services/kotlin.reflect.jvm.internal.impl.util.ModuleVisibilityHelper"},{"glob":"META-INF/services/org.freedesktop.dbus.spi.message.ISocketProvider"},{"glob":"META-INF/services/org.freedesktop.dbus.spi.transport.ITransportProvider"},{"glob":"META-INF/services/org.slf4j.spi.SLF4JServiceProvider"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE"},{"glob":"com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_XK"},{"glob":"jni/x86_64-Linux/libjffi-1.2.so"},{"glob":"kotlin/annotation/annotation.kotlin_builtins"},{"glob":"kotlin/collections/collections.kotlin_builtins"},{"glob":"kotlin/coroutines/coroutines.kotlin_builtins"},{"glob":"kotlin/internal/internal.kotlin_builtins"},{"glob":"kotlin/jvm/jvm.kotlin_builtins"},{"glob":"kotlin/kotlin.kotlin_builtins"},{"glob":"kotlin/ranges/ranges.kotlin_builtins"},{"glob":"kotlin/reflect/reflect.kotlin_builtins"},{"glob":"libsignal_jni.so"},{"glob":"libsignal_jni_aarch64.dylib"},{"glob":"libsignal_jni_amd64.dylib"},{"glob":"libsignal_jni_amd64.so"},{"glob":"libsignal_jni_testing.so"},{"glob":"libsignal_jni_testing_amd64.so"},{"glob":"net/sourceforge/argparse4j/internal/ArgumentParserImpl.properties"},{"glob":"net/sourceforge/argparse4j/internal/ArgumentParserImpl_fr.properties"},{"glob":"net/sourceforge/argparse4j/internal/ArgumentParserImpl_fr_FR.properties"},{"glob":"org/asamk/signal/manager/config/ias.store"},{"glob":"org/asamk/signal/manager/config/whisper.store"},{"glob":"org/slf4j/impl/StaticLoggerBinder.class"},{"glob":"org/sqlite/native/Linux/x86_64/libsqlitejdbc.so"},{"glob":"signal_jni.dll"},{"glob":"signal_jni_amd64.dll"},{"glob":"sqlite-jdbc.properties"},{"module":"java.base","glob":"jdk/internal/icu/impl/data/icudt76b/nfc.nrm"},{"module":"java.base","glob":"jdk/internal/icu/impl/data/icudt76b/nfkc.nrm"},{"module":"java.base","glob":"jdk/internal/icu/impl/data/icudt76b/uprops.icu"},{"module":"java.base","glob":"sun/net/idn/uidna.spp"},{"module":"java.base","glob":"sun/net/www/content-types.properties"},{"module":"java.base","glob":"sun/text/resources/LineBreakIteratorData"}]} diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java b/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java index a76924d8..8909cfbc 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/JobExecutor.java @@ -20,7 +20,7 @@ public class JobExecutor implements AutoCloseable { public JobExecutor(final Context context) { this.context = context; - this.executorService = Executors.newCachedThreadPool(); + this.executorService = Executors.newVirtualThreadPerTaskExecutor(); } public void enqueueJob(Job job) { diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index 4eced7af..a31b71da 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -157,7 +157,7 @@ public class ManagerImpl implements Manager { private final SignalDependencies dependencies; private final Context context; - private final ExecutorService executor = Executors.newCachedThreadPool(); + private final ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor(); private Thread receiveThread; private boolean isReceivingSynchronous; diff --git a/src/main/java/org/asamk/signal/http/HttpServerHandler.java b/src/main/java/org/asamk/signal/http/HttpServerHandler.java index 542d928b..1e62c3de 100644 --- a/src/main/java/org/asamk/signal/http/HttpServerHandler.java +++ b/src/main/java/org/asamk/signal/http/HttpServerHandler.java @@ -59,7 +59,7 @@ public class HttpServerHandler implements AutoCloseable { logger.debug("Starting HTTP server on {}", address); server = HttpServer.create(address, 0); - server.setExecutor(Executors.newCachedThreadPool()); + server.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); server.createContext("/api/v1/rpc", this::handleRpcEndpoint); server.createContext("/api/v1/events", this::handleEventsEndpoint); diff --git a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java index 327342a2..2d1509cf 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java +++ b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java @@ -55,7 +55,7 @@ public class JsonRpcReader { return; } - try (final var executor = Executors.newCachedThreadPool()) { + try (final var executor = Executors.newVirtualThreadPerTaskExecutor()) { while (!Thread.interrupted()) { final var input = lineSupplier.get(); if (input == null) { @@ -91,7 +91,7 @@ public class JsonRpcReader { case JsonRpcBatchMessage jsonRpcBatchMessage -> { final var messages = jsonRpcBatchMessage.getMessages(); final var responseList = new ArrayList(messages.size()); - try (final var executor = Executors.newCachedThreadPool()) { + try (final var executor = Executors.newVirtualThreadPerTaskExecutor()) { final var lock = new ReentrantLock(); messages.forEach(jsonNode -> { final JsonRpcRequest request; diff --git a/src/main/java/org/asamk/signal/jsonrpc/SocketHandler.java b/src/main/java/org/asamk/signal/jsonrpc/SocketHandler.java index 2e0d50e4..7571f07d 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/SocketHandler.java +++ b/src/main/java/org/asamk/signal/jsonrpc/SocketHandler.java @@ -63,7 +63,7 @@ public class SocketHandler implements AutoCloseable { logger.debug("Starting JSON-RPC server on {}", address); listenerThread = Thread.ofPlatform().name("daemon-listener").start(() -> { - try (final var executor = Executors.newCachedThreadPool()) { + try (final var executor = Executors.newVirtualThreadPerTaskExecutor()) { logger.info("Started JSON-RPC server on {}", address); while (true) { final var connectionId = threadNumber.getAndIncrement();