我有一个类,我从中调用一个新线程。
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中有一个函数。但是如何从我的新线程调用此函数,以便接收回调。 感谢。
答案 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获得结果。或者使用其他一些多线程原语。