@Override
    public void applyTo(Builder builder) {
        builder.nonBlockingThreadPredicate(predicate -> predicate.or(NonBlocking.class::isInstance));

        // short locks
        builder.allowBlockingCallsInside("com.linecorp.armeria.client.HttpClientFactory",
                                         "pool");
        builder.allowBlockingCallsInside("com.linecorp.armeria.internal.common.util.ReentrantShortLock",
                                         "lock");

        // Thread.yield can be eventually called when PooledObjects.copyAndClose is called
        builder.allowBlockingCallsInside("io.netty.util.internal.ReferenceCountUpdater", "release");

        // hdr histogram holds locks
        builder.allowBlockingCallsInside("org.HdrHistogram.ConcurrentHistogram", "getCountAtIndex");
        builder.allowBlockingCallsInside("org.HdrHistogram.WriterReaderPhaser", "flipPhase");

        // StreamMessageInputStream internally uses a blocking queue
        // ThreadPoolExecutor.execute internally uses a blocking queue
        builder.allowBlockingCallsInside("java.util.concurrent.LinkedBlockingQueue", "offer");

        // a single blocking call is incurred for the first invocation, but the result is cached.
        builder.allowBlockingCallsInside("com.linecorp.armeria.internal.client.PublicSuffix",
                                         "get");
        builder.allowBlockingCallsInside("java.util.ServiceLoader$LazyClassPathLookupIterator",
                                         "parse");
        builder.allowBlockingCallsInside(ResourceBundle.class.getName(), "getBundle");
        builder.allowBlockingCallsInside("io.netty.handler.codec.compression.Brotli", "<clinit>");

        // a lock is held temporarily when adding workers
        builder.allowBlockingCallsInside("java.util.concurrent.ThreadPoolExecutor", "addWorker");

        // prometheus exporting holds a lock temporarily
        builder.allowBlockingCallsInside(
                "com.linecorp.armeria.server.metric.PrometheusExpositionService", "doGet");

        // Thread.yield can be called
        builder.allowBlockingCallsInside(
                "java.util.concurrent.FutureTask", "handlePossibleCancellationInterrupt");
    }
A {@link BlockHoundIntegration} for the core module.
core/src/main/java/com/linecorp/armeria/common/CoreBlockHoundIntegration.java