run() can't throw it since then you couldn't catch it -- you don't call run(), the Thread class does.
Sleep() does this because calling interrupt() is a convenient way to tell a thread to shut down; throwing the exception gives your run() method a way to clean up before exiting.