class DefaultActorThread implements ActorThread {

    @VisibleForTesting
    /* package */ void sendTransaction(@NonNull Transaction transaction) {
        ActorHandlerBase handler = mHandler;
        if (handler != null && handler.sendTransaction(transaction)) {
            return;
        }

        synchronized (this) {
            if ((handler = mHandler) != null && handler.sendTransaction(transaction)) {
                return;
            }

            // start thread and schedule transaction
            HandlerThread thread = new HandlerThread(mThreadName);
            thread.start();

            mHandler = mThreadFactory.createThread(thread.getLooper(), mStopDelay);
            mHandler.sendTransaction(transaction);
        }
    }

      DefaultActorThread(@NonNull ProxyFactory proxyFactory, @NonNull FailureHandler failureHandler,
                                     @NonNull String threadName);
      DefaultActorThread(@NonNull ProxyFactory proxyFactory,
                                     @NonNull FailureHandler failureHandler, @NonNull String threadName, long stopDelay);
    @VisibleForTesting  DefaultActorThread(@NonNull ThreadFactory threadFactory, @NonNull ProxyFactory proxyFactory,
                                     @NonNull FailureHandler failureHandler, @NonNull String threadName, long stopDelay);

}