wait方法主要用作线程间的同步,sleep方法是让线程休眠一段时间后继续执行。
我从线程的状态说一下,两个方法执行后的区别
sleep方法执行后,当前线程会进入“阻塞状态”,sleep时间结束后进入“可运行状态”,可运行状态的线程被OS选中后获取时间片才会进入“运行状态”开始执行。需要注意的是:线程在sleep期间是不会释放锁的。
wait方法调用后,线程会释放锁,然后被放入一个“等待队列”(等待再一次获取锁,等待队列中的线程可能不只一个)。当对应的notify或者notifyAl方法执行后,等待队列中的线程会进入“锁池状态”,锁池状态的线程只有拿到锁的才可以进入“可运行状态”,可运行状态的线程被OS选中后获取时间片才会进入“运行状态”开始执行。
线程的状态转变还是比较多的 建议楼主看看《thinking in java》,书里面讲的比较详细。 |