zoukankan      html  css  js  c++  java
  • 线程误区-join,wait(里边还是调用的wait)

    1.一个线程执行结束后会执行该线程自身对象的notifyAll方法,这个是在jvm中实现的。

    2.join的作用是:当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程(thread.join())结束执行,调用线程才会继续执行。。

    3.join方法体里只有wait,却没有notify,这是为什么:

      当一个线程执行完毕之后,jvm会做清理收尾工作,这个时候才会调用notifyAll。

    join方法是Thread类的成员方法。上边例子中在main线程中调用t.join()的意思就是,使用Thread对象t作为锁对象,如果t线程还活着,就调用wait(),把main线程放到与t对象关联的等待队列里,直到t线程执行结束,系统会主动调用一下t.notifyAll(),把与t对象关联的等待队列中的线程全部移出,从而main线程可以继续执行。

    4.wait()和wait(0)都是无限等待,直至其他线程的notify使wait状态中断。

    5.在同一个线程里先后调用wait和notify无意义。

            synchronized(yy.a){
                try {
                    yy.a.wait();
                    yy.a.notifyAll();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }    

      调用wait是说当前线程在获取对象锁后,主动释放对象锁,同时本线程休眠。直到有其它线程调用对象的notify()唤醒该线程,才能继续获取对象锁,并继续执行。

    6.对于public final synchronized void join(long millis) 方法来说,用synchronized修饰方法,说明是synchronized(this)。

  • 相关阅读:
    windows环境变量
    软件工程的一般过程和需要的文档
    linux find 命令查找文件和文件夹
    mybatis中mapUnderscoreToCamelCase自动驼峰命名转换
    人体湿气重有哪些表现? 细数湿气重的危害
    MySQL升级后1728错误解决方案
    linux清理Java环境
    无线投屏PC投电视
    report studio 交叉表占比
    Cognos审核模块的导入与设置
  • 原文地址:https://www.cnblogs.com/hongchengshise/p/10418849.html
Copyright © 2011-2022 走看看