thread.sleep
sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了cpu,但其他被同步锁挡住了的线程也无法得到执行
几个问题
- thread.sleep(1000),1000ms后是否立即执行?
不一定,在未来的1000毫秒内,线程不想再参与到cpu竞争。那么1000毫秒过去之后,这时候也许另外一个线程正在使用cpu,那么这时候操作系统是不会重新分配cpu的,直到那个线程挂起或结束;况且,即使这个时候恰巧轮到操作系统进行cpu 分配,那么当前线程也不一定就是总优先级最高的那个,cpu还是可能被其他线程抢占去
- thread.sleep(0),是否有用?
thread.sleep(0)的作用,就是“触发操作系统立刻重新进行一次cpu竞争,重新计算优先级”。竞争的结果也许是当前线程仍然获得cpu控制权,也许会换成别的线程获得cpu控制权。这也是我们在大循环里面经常会写一句thread.sleep(0) ,因为这样就给了其他线程比如paint线程获得cpu控制权的权力,这样界面就不会假死在那里