All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.sdk.internal.DaemonThreadFactory Maven / Gradle / Ivy

There is a newer version: 1.44.1
Show newest version
/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.sdk.internal;

import io.opentelemetry.context.Context;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * A {@link ThreadFactory} that delegates to {@code Executors.defaultThreadFactory()} and marks all
 * threads as daemon.
 *
 * 

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. */ public final class DaemonThreadFactory implements ThreadFactory { private final String namePrefix; private final AtomicInteger counter = new AtomicInteger(); private final ThreadFactory delegate = Executors.defaultThreadFactory(); private final boolean propagateContextForTesting; public DaemonThreadFactory(String namePrefix) { this(namePrefix, /* propagateContextForTesting= */ false); } /** * {@link DaemonThreadFactory}'s constructor. * * @param namePrefix Used when setting the new thread's name. * @param propagateContextForTesting For tests only. When enabled, the current thread's {@link * Context} will be passed over to the new threads, this is useful for validating scenarios * where context propagation is available through bytecode instrumentation. */ public DaemonThreadFactory(String namePrefix, boolean propagateContextForTesting) { this.namePrefix = namePrefix; this.propagateContextForTesting = propagateContextForTesting; } @Override public Thread newThread(Runnable runnable) { Thread t = delegate.newThread( propagateContextForTesting ? Context.current().wrap(runnable) : runnable); try { t.setDaemon(true); t.setName(namePrefix + "-" + counter.incrementAndGet()); } catch (SecurityException e) { // Well, we tried. } return t; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy