sleep和wait的区别
sleep()和wait()方法的最大区别是:
sleep()睡眠时,保持对象锁,仍然占有该锁;
而wait()睡眠时,释放对象锁。
提问:调用sleep()函数的时候,线程是否一直占用CPU? 回答:不占用,等待时会把CPU让出来,给其他需要CPU资源的线程使用 不止调用sleep()函数,在进行一些阻塞调用,例如网络编程中的阻塞accept()【等待客户端连接】和阻塞recv()【等待下游回包】也不占用CPU资源
四者都是将,线程暂定,休息,中断,等待。
1,锁池:所有需要竞争同步锁的线程都会放到锁池中。得到同步锁后就会进入就绪队列进行cpu资源分配
2,等待池:调用了wait()后,线程被放到等待池中。只有调用了notify()或notifyAll(),线程才会去竞争同步锁。
sleep(原理:把cpu的执行资格权利释放出去,过了休眠时间再收回,即使该线程有锁,sleep了也不会释放锁)
sleep和wait区别:
1,sleep是Thread的静态本地方法,wait是Object类的本地方法
2,sleep方法不会释放lock,但是wait会释放。
3,sleep不依赖于同步器(synchronize),但是wait需要依赖。
4,sleep不需要被唤醒,但是wait要
5,sleep一般用于当前线程休眠,轮循暂停,wait则多用于多线程中的通信
6,sleep 会让出cpu执行时间,且强制上下午切换,而wait不一定,还有机会进行竞争同步锁
yield执行后,线程从运行状态进入就绪状态,释放cpu的执行权,(将全力给回cpu),但是依然保留cpu的执行资格,所以有可能cpu下次还有可能让该线程执行
join执行后,线程进入阻塞状态。线程b调用a的join(),b进入阻塞队列,知道线程a结束才能运行b。