java如何使用Object中的wait方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
java Object wait方法
当线程B访问某个共享资源时,想获取资源的锁对象,发现这个锁已经被线程A拿到了,这个时候,线程B只能被挂起,等待线程A释放锁。
但是拿到锁的线程A在执行的过程中,因为某些条件还不满足,暂时不想继续执行下去,想先等待一下(注意:是已经拿到锁的线程A自己想主动等待的),希望等到某个条件满足后,继续执行任务。在同步代码块里,线程A必须先释放锁,线程B才有资格获取锁,进入同步代码块,执行代码。等线程B执行完后,线程A需要的条件已经满足,那么这个时候必须有一个通知机制,让线程A从等待状态变成执行状态,继续执行代码。
有些同学认为线程A也可以一直循环判断,检查条件是否已经满足,而不一定要中断自己,然后等待。其实这种也是一种思路,但是呢?比较耗CPU,而且也不知道条件何时才能满足。
线程之间要协调沟通,必须有一个等待机制和通知机制,在JAVA里面,对应的就是wait方法和notify方法。
Object的wait方法
synchronized (obj) { while (condition does not ok){ obj.wait(); } }
如果想让线程A处于等待状态,可以调用当前对象wait方法。wait方法一旦被调用,也就意味着:线程A已经获得锁了,而且能做的事情都已经做了,现在只能等待了,等待另外的同步操作执行某些代码后,我才回来继续干活。
注意:
wait方法是定义在根类Object上的,Thread继承自Object类,自然也有wait方法。但是这里并不是调用当前线程对象的wait方法,而是具有锁属性的当前对象的wait方法;这一点我也不太理解,我觉得要做到线程A切换到等待状态,之后被人唤醒,就算使用线程A的wait方法和notify方法其实也是可以做到的,但是估计实现起来非常麻烦。另外从场景上看,wait定义在Object也比较合理,表示线程挂在了对象的等待池中。
关于java如何使用Object中的wait方法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。