大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“java中sleep()和wait()的区别是什么”,在日常操作中,相信很多人在java中sleep()和wait()的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中sleep()和wait()的区别是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
顺城ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
区别说明
1、wait()是Object的方法,sleep()是Thread的方法。
2、wait()必须采用同步方法,不需要sleep()方法。
3、线程在同步方法中执行sleep()方法,不释放monitor锁,wait()方法释放monitor锁。
短暂休眠后,sleep()方法会主动退出阻塞,而wait()方法需要在没有指定wait时间的情况下被其他线程中断才能退出阻塞。
实例
import java.text.SimpleDateFormat; import java.util.Date; public class TestSleepAndWait { public static void main(String[] args) { new Thread1().start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } new Thread2().start(); } } class Thread1 extends Thread{ private void sout(String s){ System.out.println(s+" "+new SimpleDateFormat("HH:mm:ss:SS").format(new Date())); } @Override public void run() { sout("enter Thread1.run"); synchronized (TestSleepAndWait.class){//wait只能在同步代码块或者同步方法中使用 sout("Thread1 is going to wait"); try { TestSleepAndWait.class.wait(); // 这里只能使用持有锁TestSleepAndWait.class.wait(),使用其他对象则报错java.lang.IllegalMonitorStateException } catch (InterruptedException e) { e.printStackTrace(); } sout("after waiting, thread1 is going on"); sout("thread1 is over"); } } } class Thread2 extends Thread{ private void sout(String s){ System.out.println(s+" "+new SimpleDateFormat("HH:mm:ss:SS").format(new Date())); } @Override public void run() { sout("enter Thread2.run"); synchronized (TestSleepAndWait.class){//wait只能在同步代码块或者同步方法中使用 sout("Thread2 is going to notify"); TestSleepAndWait.class.notify(); 这里只能使用持有锁TestSleepAndWait.class sout("thread2 is going to sleep 10ms"); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } sout("after sleeping, thread2 is going on"); sout("thread2 is over"); } } }
到此,关于“java中sleep()和wait()的区别是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!