|
28 | 28 | import io.micrometer.core.instrument.internal.TimedExecutorService; |
29 | 29 | import io.micrometer.core.instrument.internal.TimedScheduledExecutorService; |
30 | 30 |
|
| 31 | +import java.lang.invoke.MethodHandle; |
| 32 | +import java.lang.invoke.MethodHandles; |
31 | 33 | import java.lang.reflect.Field; |
32 | 34 | import java.lang.reflect.Method; |
33 | 35 | import java.util.List; |
@@ -60,7 +62,7 @@ public class ExecutorServiceMetrics implements MeterBinder { |
60 | 62 | private static final String CLASS_NAME_THREAD_PER_TASK_EXECUTOR = "java.util.concurrent.ThreadPerTaskExecutor"; |
61 | 63 |
|
62 | 64 | @Nullable |
63 | | - private static final Method METHOD_THREAD_COUNT_FROM_THREAD_PER_TASK_EXECUTOR = getMethodForThreadCountFromThreadPerTaskExecutor(); |
| 65 | + private static final MethodHandle METHOD_HANDLE_THREAD_COUNT_FROM_THREAD_PER_TASK_EXECUTOR = getMethodHandleForThreadCountFromThreadPerTaskExecutor(); |
64 | 66 |
|
65 | 67 | private static boolean allowIllegalReflectiveAccess = true; |
66 | 68 |
|
@@ -461,20 +463,20 @@ private void monitorThreadPerTaskExecutor(MeterRegistry registry, ExecutorServic |
461 | 463 |
|
462 | 464 | private static long getThreadCountFromThreadPerTaskExecutor(ExecutorService executorService) { |
463 | 465 | try { |
464 | | - return (long) METHOD_THREAD_COUNT_FROM_THREAD_PER_TASK_EXECUTOR.invoke(executorService); |
| 466 | + return (long) METHOD_HANDLE_THREAD_COUNT_FROM_THREAD_PER_TASK_EXECUTOR.invoke(executorService); |
465 | 467 | } |
466 | 468 | catch (Throwable e) { |
467 | 469 | throw new RuntimeException(e); |
468 | 470 | } |
469 | 471 | } |
470 | 472 |
|
471 | 473 | @Nullable |
472 | | - private static Method getMethodForThreadCountFromThreadPerTaskExecutor() { |
| 474 | + private static MethodHandle getMethodHandleForThreadCountFromThreadPerTaskExecutor() { |
473 | 475 | try { |
474 | 476 | Class<?> clazz = Class.forName(CLASS_NAME_THREAD_PER_TASK_EXECUTOR); |
475 | 477 | Method method = clazz.getMethod("threadCount"); |
476 | 478 | method.setAccessible(true); |
477 | | - return method; |
| 479 | + return MethodHandles.lookup().unreflect(method); |
478 | 480 | } |
479 | 481 | catch (Throwable e) { |
480 | 482 | return null; |
|
0 commit comments