从内部线程java访问外部类

时间:2013-03-02 23:28:07

标签: java multithreading class outer-join

在类OuterClass中,我有一个Thread InnerThread。在线程中我需要从OuterClass访问一个方法。我该怎么做呢?我试过了:

public class OuterClass{

   public static void main(String[]args){
      Runnable thread = new innerThread(param);
        new Thread(thread).start();

   public void method(param1, param2){
      System.out.println("Test method");
   } 



   public class InnerThread extends Thread{
      public void run(){
         System.out.println("Test thread")
         OuterClass.this.method(param1, param2);
      }
   }

}

但是程序没有进入该方法。为什么会这样呢?它是如何运作的?

编辑我确定线程正在运行,因为我在那里执行其他操作并且它们正常工作,并且我在方法的开头(param1,param2)放了一个打印,所以我确定它不输入方法。我只尝试了没有OuterClass.this的方法(param1,param2),但它也没有用。

2 个答案:

答案 0 :(得分:1)

这很好用:

public class OuterClass {

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(new OuterClass().new InnerThread());
        t.start();
        t.join();
    }

    public void method(String param1, String param2) {
        System.out.println("Test method ("+param1+","+param2+")");
    }

    public class InnerThread extends Thread {

        public void run() {
            System.out.println("Test thread");
            method("A", "B");
        }
    }
}

打印

Test thread
Test method (A,B)

答案 1 :(得分:0)

这可以通过创建两个单独的类来实现 1包含OuterClass
2其他构成外类的实例,即主类。
看一看。

public class Main {


public static void main(String arg[]){

OuterClass o=new OuterClass(1,3);
   }
    }

class OuterClass{
    int param,param2;
    InnerThread t;

OuterClass(int x,int y){
this.param=x;
this.param2=y;
InnerThread t=new InnerThread();
t.start();
}

 public class InnerThread extends Thread{
      public void run(){
         System.out.println("Test thread");
         OuterClass.this.method();
      }
   }
 public void method(){
      System.out.println(this.param+this.param2);
   }
}