To answer you second question,
You can make the program multi threaded just the way you originally did it, by calling the start() method of the thread object.
By the way, if your only intention is to use the class
open as a multi-threaded one and not actually give it thread behavior
you should implement the Runnable interface rather than extending the Thread class.
The only reason to extend the Thread class is when you are customizing the Thread class to add some functionality, which you shouldn't be generally doing.