廊坊网站开发公司,国内新闻最新官方消息,wordpress 登录 不同,培训网站开发机构一、什么是sleep()?sleep()是Thread类的方法#xff0c;导致线程暂停执行的时间#xff0c;给其他线程执行机会#xff0c;但是依然保持监控状态#xff0c;过了指定时间会自动恢复执行#xff0c;调用sleep()方法不会释放锁对象。当调用sleep()方法后#xff0c;当前线…一、什么是sleep()?sleep()是Thread类的方法导致线程暂停执行的时间给其他线程执行机会但是依然保持监控状态过了指定时间会自动恢复执行调用sleep()方法不会释放锁对象。当调用sleep()方法后当前线程进入阻塞状态。目的是让出cpu给其他线程运行的机会。但是由于sleep方法不会释放锁对象所以在一个同步代码块中调用这个方法后线程虽然休眠了但其他线程无法访问他的锁对象。这是因为sleep方法拥有cpu的执行权他可以自动醒来无需唤醒。而当sleep结束指定休眠时间后这个线程不一定立即执行因为此时其他线程可能正在运行。二、什么是wait()?wait方法是object类里的方法当一个线程执行到wait方法时它就进入到一个和该对象相关的线程池中同时释放了锁对象等待期间可以调用里面的同步方法其他线程可以访问等待时不拥有cpu的执行权否则其他线程无法获取执行权。当一个线程执行了wait方法后必须调用notify或者notifyAll方法才能唤醒而且是随机唤醒若是被其他线程抢到了cpu执行权该线程会继续进入等待状态。由于锁对象可以是任意对象所以wait方法必须定义在Object类中因为Object类是所有类的基类。三、总结sleep()和wait()的区别1.sleep()是Thread类中的静态方法wait()是Object超类中定义的成员方法因此sleep()可以在任何地方使用而wait()只能在同步方法或者同步代码块中使用。2.sleep()方法必须传一个时间参数而wait()可传可不传3.sleep()方法导致了程序暂停执行的时间让出cpu给其他线程但是他的监控状态依然保持着当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中线程不会释放对象锁。而当调用wait()方法的时候线程会放弃对象锁进入等待此对象的等待锁定池只有支队此对象调用notify()方法后本线程才进入对象锁定池准备。4.sleep()方法需要抛出异常wait方法不需要why因为Thread类中的sleep()方法就已经进行了抛异常处理。