我们如何在没有实例化类的情况下访问对象类的wait()非静态方法?

时间:2018-01-23 17:23:59

标签: java multithreading

class TestJoinMethod1 extends Thread{  
 public void run(){  
  for(int i=1;i<=5;i++){  
   try{  
    Thread.sleep(500);  
   }catch(Exception e){System.out.println(e);}  
  System.out.println(i);  
  }  
 }  
public static void main(String args[]){  
 TestJoinMethod1 t1=new TestJoinMethod1();  
 TestJoinMethod1 t2=new TestJoinMethod1();  
 TestJoinMethod1 t3=new TestJoinMethod1();  
 t1.start();  
 try{  
  t1.join();  
 }catch(Exception e){System.out.println(e);}  

 t2.start();  
 t3.start();  
 }  
}

join方法属于线程类的非静态方法。在这里,他们创建了一个扩展线程的类的对象,并使用该引用变量访问join方法。

public class Account 
{
   int bal=5000;
   synchronized public  void withdraw(int amt)
   {
       System.out.println("balance is="+bal);
       if(amt>bal)
       {
           System.out.println("low balance waiting for deposit");
           try
           {
               wait(5000);
               bal=bal-amt;
               System.out.println("override balance ="+bal);
          }
           catch (InterruptedException  e)
           {
              e.printStackTrace(); 
           }
       }

   }
    synchronized  public   void deposit(int amt)
       {
           System.out.println("depositing"+amt);
           bal=bal+amt;
           System.out.println("available bal="+bal);
           notify();
          }

}

如何在不创建对象的情况下访问对象类的非静态方法? wait方法和notify方法。通常对于非静态方法,我们创建一个对象并使用我们调用的对象。但为此,我们如何在不创建对象的情况下访问?

1 个答案:

答案 0 :(得分:2)

每个非静态方法都有一个显式引用(this)到调用此方法的对象。因此notify()this.notify()相同,其中this是调用Account的{​​{1}}变量。所以这里没有问题要解决。