java中的wait()和notify()方法

时间:2014-09-07 10:49:50

标签: java

我见过很多例子,我们直接调用了wait()notify()方法。

class ThreadB extends Thread{
    int total;
    @Override
    public void run(){
        synchronized(this){
            for(int i=0; i<100 ; i++){
                total += i;
            }
            notify();
        }
    }
}

但在对象类中,notify的方法签名定义为

public final void notify()

有人可以解释我们如何在不使用对象的情况下直接调用这些方法,因为这些方法没有定义为静态。

3 个答案:

答案 0 :(得分:1)

在java中,每个类直接或间接地扩展类Object。这就是为什么可以使用在类Object中定义的方法 - 例如 - wait(),notify(),equals(),hashcode()等。

检查this

this

答案 1 :(得分:0)

这些方法是Object类(每个类的超类)的一部分,因此这些方法在您编写的所有类中都被继承(隐式)。

来到静态部分,调用这些方法不需要它们是静态的,因为它们是你的类的一部分,因此当你说wait()时,你实际上意味着它被调用到正确的对象上。

答案 2 :(得分:0)

MethodName ( [ArgumentList] )形式的方法调用表达式调用当前类的方法。如果该方法不是静态的,则在当前对象上调用它,即对象this指向。也就是说,方法调用表达式notify()只是写this.notify()的简写。

notify()的实现可以查询其this以找出应该通知哪些对象的等待线程。