A thread that can be interrupted before starting
Review


A Java Thread's default behavior is:


  A thread interruption ignored because a thread was not alive at the
  time of the interrupt will be reflected by this method returning
  false.

Changing the default behavior of interruption in a thread's lifecycle seems a bit tricky to me. I don't think you should override exising methods to change their specification when dealing with such common and wellknown threading constructs. 
Instead, I would create 2 new methods, requestRun() and requestInterruption() to clearly indicate different functionality from run() and interrupt().
If you do decide to override run() and interrupt() make sure to clearly state in the Javadoc that the specification of these methods has changed.
InterruptableThread is an unfortunate name, since Thread is also interruptible. A better name would be PreemptiveInterruptibleThread.
Since you have atomic booleans, perhaps you could check the value before taking the lock, in order to mitigate access to the locks. There is a possible race condition though. You can read more about Double-checked locking here. Is your question implementation Idempotent?
If the atomic booleans are only used inside this lock, they could be replaced with ordinary booleans.
I like the fact everything that could be made final, has been declared final.
I do believe there still is a race condition after releasing the lock in run() and before calling super.run().