public void run() {
   try {
     runnable.run();
   } catch (Throwable e) {
     DebuggableThreadPoolExecutor.handleOrLog(e);
   }
 }
 public long getMessagingReceiverTaskCount() {
   DebuggableThreadPoolExecutor dstp =
       (DebuggableThreadPoolExecutor) messageDeserializationExecutor_;
   return dstp.getTaskCount() - dstp.getCompletedTaskCount();
 }
 // We need this as well as the wrapper for the benefit of non-repeating tasks
 @Override
 public void afterExecute(Runnable r, Throwable t) {
   super.afterExecute(r, t);
   DebuggableThreadPoolExecutor.logExceptionsAfterExecute(r, t);
 }
 public long getMessagingSerializerTaskCount() {
   DebuggableThreadPoolExecutor dstp = (DebuggableThreadPoolExecutor) messageSerializerExecutor_;
   return dstp.getTaskCount() - dstp.getCompletedTaskCount();
 }