diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ThreadFactoryUtil.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ThreadFactoryUtil.java index 67f4d3230d..72d58e85be 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ThreadFactoryUtil.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ThreadFactoryUtil.java @@ -69,6 +69,11 @@ public static ThreadFactory tryCreateVirtualThreadFactory(String baseNameFormat) } catch (ClassNotFoundException | NoSuchMethodException ignore) { return null; } catch (InvocationTargetException | IllegalAccessException e) { + // Java 20 supports virtual threads as an experimental feature. It will throw an + // UnsupportedOperationException if experimental features have not been enabled. + if (e.getCause() instanceof UnsupportedOperationException) { + return null; + } throw new RuntimeException(e); } } @@ -91,6 +96,11 @@ public static ExecutorService tryCreateVirtualThreadPerTaskExecutor(String baseN } catch (NoSuchMethodException ignore) { return null; } catch (InvocationTargetException | IllegalAccessException e) { + // Java 20 supports virtual threads as an experimental feature. It will throw an + // UnsupportedOperationException if experimental features have not been enabled. + if (e.getCause() instanceof UnsupportedOperationException) { + return null; + } throw new RuntimeException(e); } }