Skip to content

Commit e5d159b

Browse files
committed
Replace Method with MethodHandle for ThreadPerTaskExecutor.threadCount()
Signed-off-by: Johnny Lim <[email protected]>
1 parent d99f984 commit e5d159b

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/ExecutorServiceMetrics.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import io.micrometer.core.instrument.internal.TimedExecutorService;
2929
import io.micrometer.core.instrument.internal.TimedScheduledExecutorService;
3030

31+
import java.lang.invoke.MethodHandle;
32+
import java.lang.invoke.MethodHandles;
3133
import java.lang.reflect.Field;
3234
import java.lang.reflect.Method;
3335
import java.util.List;
@@ -60,7 +62,7 @@ public class ExecutorServiceMetrics implements MeterBinder {
6062
private static final String CLASS_NAME_THREAD_PER_TASK_EXECUTOR = "java.util.concurrent.ThreadPerTaskExecutor";
6163

6264
@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();
6466

6567
private static boolean allowIllegalReflectiveAccess = true;
6668

@@ -461,20 +463,20 @@ private void monitorThreadPerTaskExecutor(MeterRegistry registry, ExecutorServic
461463

462464
private static long getThreadCountFromThreadPerTaskExecutor(ExecutorService executorService) {
463465
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);
465467
}
466468
catch (Throwable e) {
467469
throw new RuntimeException(e);
468470
}
469471
}
470472

471473
@Nullable
472-
private static Method getMethodForThreadCountFromThreadPerTaskExecutor() {
474+
private static MethodHandle getMethodHandleForThreadCountFromThreadPerTaskExecutor() {
473475
try {
474476
Class<?> clazz = Class.forName(CLASS_NAME_THREAD_PER_TASK_EXECUTOR);
475477
Method method = clazz.getMethod("threadCount");
476478
method.setAccessible(true);
477-
return method;
479+
return MethodHandles.lookup().unreflect(method);
478480
}
479481
catch (Throwable e) {
480482
return null;

0 commit comments

Comments
 (0)