45 lines
932 B
Java
45 lines
932 B
Java
import datadog.trace.api.Trace;
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
public class AsyncChild implements Runnable, Callable {
|
|
private final AtomicBoolean blockThread;
|
|
private final boolean doTraceableWork;
|
|
|
|
public AsyncChild() {
|
|
this(true, false);
|
|
}
|
|
|
|
public AsyncChild(final boolean doTraceableWork, final boolean blockThread) {
|
|
this.doTraceableWork = doTraceableWork;
|
|
this.blockThread = new AtomicBoolean(blockThread);
|
|
}
|
|
|
|
public void unblock() {
|
|
blockThread.set(false);
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
runImpl();
|
|
}
|
|
|
|
@Override
|
|
public Object call() throws Exception {
|
|
runImpl();
|
|
return null;
|
|
}
|
|
|
|
private void runImpl() {
|
|
if (doTraceableWork) {
|
|
asyncChild();
|
|
}
|
|
while (blockThread.get()) {
|
|
// busy-wait to block thread
|
|
}
|
|
}
|
|
|
|
@Trace(operationName = "asyncChild")
|
|
private void asyncChild() {}
|
|
}
|