从新线程回调到启动线程的类

时间:2013-03-25 09:19:59

标签: java multithreading callback

我有一个类,我从中调用一个新线程。

public class MainClass{

 private void cleardata() {
                // do something on a separate thread
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //Do Something
        //After this I would like to notify my MainClass that some thing has been done and pass a value. 
        }
      }
     }
   private void callbackFunc(int a){

    // Do something based on value of a 
  }
}

我的MainClass中有一个函数。但是如何从我的新线程调用此函数,以便接收回调。 感谢。

4 个答案:

答案 0 :(得分:1)

您应该只能通过其名称调用MainClass中的方法,就像您直接在MainClass内部调用一样(而不是从内部类中调用)。

如果您要调用的方法名称与您的内部类从Object继承的方法名称发生冲突,那么您可以使用MainClass.this作为前缀,例如: MainClass.this.toString()toString上调用MainClass,而toString()只在内部类实例上调用它。

答案 1 :(得分:0)

在这种情况下,将MainClass的实例传递给线程类((在创建期间)),以便它可以在其上调用方法。按照他人的建议进行内部课程也是一个不错的选择。

类似的东西 -

class MainClass {

private void cleardata() {
    new Thread(new MyThread(this)).start();
}

}

类MyThread实现了Runnable {

private MainClass mc;

MyThread(MainClass mc) {
    this.mc = mc;
}

public void run() {
    // do something
    // mc.someMethod();
}

}

答案 2 :(得分:0)

public class MainClass{

private void cleardata() {
        // do something on a separate thread
        new Thread(new Runnable() {
            @Override
            public void run() {
                callBackFunc(result); 
            }
        }
}

private void callBackFunc(int a) {

}
}

答案 3 :(得分:0)

就这样做:

public class MainClass{

  private void cleardata() {
            // do something on a separate thread
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //Do Something
                    notifyTheClass("a parameter");
     }
  }

  private void notifyTheClass(String aParam) {
  //..do something else
  }  
 }
}

但它与线程无关,这与内部类有关。如果希望主线程等到新线程完成,请使用Futures获得结果。或者使用其他一些多线程原语。