2

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

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

4 回答 4

1

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

如果您要调用的方法名称碰巧与您的内部类继承的方法名称冲突,Object那么您可以在调用前加上MainClass.this,例如MainClass.this.toString()调用toStringon MainClass,而只toString()在内部类实例上调用它。

于 2013-03-25T09:23:34.470 回答
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();
}

}

于 2013-03-25T09:21:57.697 回答
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) {

}
}
于 2013-03-25T09:25:11.750 回答
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获取结果。或者使用其他一些多线程原语。

于 2013-03-25T09:26:41.403 回答