您的位置:首页 > 教育 > 锐评 > 外贸最大电子元器件交易网站_武汉网站设计公司_做网站比较好的公司有哪些_朝阳区seo搜索引擎优化介绍

外贸最大电子元器件交易网站_武汉网站设计公司_做网站比较好的公司有哪些_朝阳区seo搜索引擎优化介绍

2025/8/22 17:03:46 来源:https://blog.csdn.net/t1750982356/article/details/143997064  浏览:    关键词:外贸最大电子元器件交易网站_武汉网站设计公司_做网站比较好的公司有哪些_朝阳区seo搜索引擎优化介绍
外贸最大电子元器件交易网站_武汉网站设计公司_做网站比较好的公司有哪些_朝阳区seo搜索引擎优化介绍

线程控制方法之wait和sleep的区别

wait()和sleep()都是Java线程控制方法,但存在明显区别:

  1. 所属与调用:wait()属Object类,需synchronized调用;sleep()属Thread类,可随意调用。
  2. 锁处理:wait()释放锁,进入等待状态;sleep()不释放锁,仅暂停执行。
  3. 唤醒机制:wait()需notify()或notifyAll()唤醒;sleep()自动苏醒。
  4. 用途:wait()多用于线程间通信;sleep()用于暂停执行。
  5. 异常:两者都可能抛出InterruptedException。

总结:wait()释放锁并等待唤醒,用于线程通信;sleep()不释放锁且自动苏醒,用于暂停执行。

public class ThreadDemo25 {public static void main(String[] args) {Object locker=new Object();Thread t1=new Thread(()->{synchronized (locker){System.out.println("wait之前");try {locker.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("wait之后");}});Thread t2=new Thread(()->{try {Thread.sleep(5000);synchronized (locker){System.out.println("notify之前");locker.notify();System.out.println("notify之后");}} catch (InterruptedException e) {e.printStackTrace();}});t1.start();t2.start();}
}

在这里插入图片描述

t2的notify()唤醒t1之后,只有等t2执行完自己的,释放锁之后,t1才能继续。所以先打印notify之后,再打印wait之后

t2 sleep结束之后,由于t1是wait状态,锁是释放的,t2就能拿到锁。

接下来打印t2 notify之前,执行notify操作,这个操作就能唤醒t1(此时t1就从WAITING状态恢复回来了)

但是由于t2此时还没有释放锁呢,t1 WAITING恢复之后,尝试获取锁,就可能会出现一个小小的阻塞,这个阻塞是由于锁竞争引起的。(肉眼很难看到BLOCKED状态,这个状态的变换是非常快的)

t2执行完t2 notify之后,释放锁,t2执行完毕,t1的wait就可以获取到锁了,继续执行打印t1 wait之后。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com