Basically, wait is used when a thread is "waiting" for a certain condition to be met, at which time it will presumably be "notified" so it can resume. (See the notify and notifyAll methods in Object.) This is often used with resources protected by a lock (synchronized code). While waiting, the thread releases its lock on those resources so that other threads can use them.
On the other hand, sleep is basically a pause in the thread's execution. Locks are not released while sleeping, although the CPU is freed up to do other things.
See the
Java Tutorial on threads...
http://java.sun.com/docs/books/tutorial/essential/threads/index.html