i) wait: With wait you can terminate the execution of current
thread until you get a notify from
other thread. Once you make a thread wait any other thread can run after that. By calling
this you have just temporarily released the lock on the object.
ii)join: when you call join on a thread, you are telling the current thread that you will get a
chance of execution immediately after this thread is completed. eg
public static void main(String...args)
{
MyThread t=new MyThread();
t.start();
t.join();
//here you are telling main method Thread that you can start you execution immediately after
//MyThread is executed
}