java线程阻塞状态(java线程间的通信-wait)

^_^关注收藏点赞,每天查看更新,我来为大家讲解一下关于java线程阻塞状态?跟着小编一起来看一看吧!

java线程阻塞状态(java线程间的通信-wait)

java线程阻塞状态

^_^关注收藏点赞,每天查看更新。

摘要:在Java多线程同步(synchronization)—两种方法同步代码块案例中无条件的阻塞了其他线程异步访问某个方法,其他线程处于等待状态,这样浪费了CPU资源。理想的情况下,让线程处于运作状态,节约CPU时间。所以,java包含了通过wai(),notify()和notifyAll() 方法实现进程间的通信机制。这些方法对象中是用final 方法实现的,所以所有的类都包含它们,这三个方法仅在synchronized方法中才能被调用。

    wait():告知被调用的线程放弃进入管程进入休眠直到其他线程进入相同管程并且调用notify();

    notify():恢复相同对象中第一个调用wait()的线程;

    notifyAll():恢复相同对象中所有调用wait()的线程,具有最高优先级的线程最先运行。

这些方法在Object中被声明,如下所示:

    final void wait() throws InterruptedException

    final void notify()

    final void notifyAll()

    下面的案例程序错误的实行了一个简单的生产者和消费者的问题。它由4个类组成:Queen:设法获取同步的序列;Producer:产生排队的线程对象;Consumer:消费序列的线程对象;PC:创建单个Queen,Producer和Consumer的小类。

    错误案例图

    理想正确案例图

    源码结果比较图

    结语:横看成岭侧成峰,远近高低各不同。每天学习一点点,线程也不会很难

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页