错了吧?调用sleep()方法,是一直占有着cpu,不会放弃cpu的。用wait()方法才可以进入阻塞,让出cpu,等待notify()唤醒。
执行线程sleep方法是依然占着cpu的,操作系统认为该当前线程正在运行,不会让出系统资源。
执行wait方法是让线程到等待池等待,让出一系列的系统资源,其他线程可以根据调度占用cpu
线程的资源有不少,但应该包含CPU资源和锁资源这两类。
sleep(long mills):让出CPU资源,但是不会释放锁资源。
wait():让出CPU资源和锁资源。
锁是用来线程同步的,sleep(long mills)虽然让出了CPU,但是不会让出锁,其他线程可以利用CPU时间片了,但如果其他线程要获取sleep(long mills)拥有的锁才能执行,则会因为无法获取锁而不能执行,继续等待。
但是那些没有和sleep(long mills)竞争锁的线程,一旦得到CPU时间片即可运行了。
我的java书上说:sleep(long mills)是会让出CPU的
估计你把资源和锁搞错了
不会的。