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

Java 从新线程回调到启动线程的类,java,multithreading,callback,Java,Multithreading,Callback,我有一个调用新线程的类 public class MainClass{ private void cleardata() { // do something on a separate thread new Thread(new Runnable() { @Override public void run() {

我有一个调用新线程的类

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的实例传递给thread类((在创建过程中)),以便它可以对其调用方法。按照其他人的建议拥有内部类也是一个不错的选择

类似的东西-

class MainClass {

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

类MyThread实现可运行{

private MainClass mc;

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

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

}

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

如果要调用的方法名与内部类从
对象继承的方法名冲突,则可以使用
MainClass作为调用的前缀。这
,例如
MainClass.this.toString()
MainClass
上调用
toString
,而只调用
toString()
在内部类实例上调用它。

只需执行以下操作:

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) {

}
}
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
  }  
 }
}

但它与线程无关,这是关于内部类的。如果希望主线程等待新线程完成,请使用。或者使用其他一些多线程原语。

如果该方法与线程在同一个类中,您可以调用它并传递结果。您是否尝试过从run()内部调用该操作?请不要混淆
thread
Runnable
。有什么区别?非常感谢,一个简单的问题。如果线程来自同一个类,那么即使私有函数也可以访问?@Sunny是的,允许内部类或静态嵌套类访问其包含类的所有成员,即使是私有成员。
private
修饰符限制对类主体词法范围的访问,其中包括嵌套在其中的任何其他类。