The sleep() method is static. It makes the current thread go to a non-runnable (generally called sleeping) state. The thread is guaranteed not to run atleast for the milliseconds passed as argument to this method.
The wait() method is instance-specific and is invoked on an object. It should be called only from within a static context (static method or a block) and the thread that invokes this method on the object will not run unless it has the object's lock. [Every object has a lock]. For this thread to continue execution, notify() or notifyAll() has to be called on the same object by some other thread that has the lock. After it gets a notify, the thread goes to runnable state.
after the time expires the thread goes to ready aste in case of wait() and thread goes to waiting state in case of sleep()
A thread goes to runnable state from both blocked/sleeping state.