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
方法。通常对于非静态方法,我们创建一个对象并使用我们调用的对象。但为此,我们如何在不创建对象的情况下访问?
答案 0 :(得分:2)
每个非静态方法都有一个显式引用(this
)到调用此方法的对象。因此notify()
与this.notify()
相同,其中this
是调用Account
的{{1}}变量。所以这里没有问题要解决。