The interruption mechanism is the preferred way to implement cancellation, but calling interrupt() should be considered a request for interruption of the target thread; it does not by definition mean that the target thread will halt execution. You're merely asking the thread to interrupt itself at its own convenience. How that request is dealt with may vary.
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.