大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“Java中wait()方法和notify()方法使用时的注意事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中wait()方法和notify()方法使用时的注意事项”吧!
创新互联专注于企业全网营销推广、网站重做改版、德江网站定制设计、自适应品牌网站建设、H5建站、商城开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为德江等各大城市提供网站开发制作服务。
wait()方法和notify()方法在使用时都有一个前提条件,必须都要获取当前对象的锁。也就是说如果wait()方法和notify()方法在使用时没有获取到锁时,程序就会直接抛出异常。
我们看程序出线了异常。原因是我们没有添加synchronized关键字,所以线程获取不到锁,而直接抛出的异常。
wait()方法在执行完成后,会立刻释放对象的锁,这时其它线程依然可以执行wait()方法所在的synchronized同步方法。而notify()方法在执行完成后不会立即释放对象的锁,直到这个线程的synchronized同步方法执行完时才会释放锁。
我们看两个线程都暂停了,这就说明两个线程都获得了执行,原因就是上面分析的一样,wait()方法在执行完会立即释放对象的锁,所以线程一执行完时,线程二就可以直接获取到锁并执行,所以输出是异步显示的。下面我们在看一下notify()方法的事例。
我们看线程是同步执行的。原因是notify()方法在执行后不会立刻释放对象的锁,所以线程一在执行notify()方法后,线程二虽然已经启动成功,但它获取不到当前对象的锁,因为线程一还没有将锁释放,所以线程二只能等待因为方法是synchronized同步方法,所以输出信息是同步执行的。
wait()方法的本质是将当前线程添加到等待队列中,它不是线程的结束,因为它还可以恢复。notify()方法的本质是将等待队列中某一个线程使它退出等待队列。但如果等待队列中的线程有很多,notify()方法也只是随机抽取一个线程让它退出等待队列。
我们看线程一已经被唤醒了,然后继续执行了synchronized同步方法里的内容。
线程状态图
到此,相信大家对“Java中wait()方法和notify()方法使用时的注意事项”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!