好的,现在基本上我有这个代码:
class a {
public void ab() {
b thread = new b();
thread.bb(this);
}
}
class b {
public void bb(a _a) {
//execute code here in new thread so ab can continue running
}
}
然而,这并没有在一个新的线程中打开它,是的,我做了研究,我找到的所有解决方案都没有留下任何选项将参数(this)发送到bb方法
如何在需要参数的新线程中调用class.method?
答案 0 :(得分:2)
问题是“如何在需要参数的新线程中调用class.method?”
答案是“你不能”......但是,这是一种解决方法:使用带有构造函数的实例来定义执行的“上下文”。
class MyThread extends Thread {
MyThread( A a ){
this.a = a;
}
@Override public void run() {
... use this.a; // a was the "parameter"
}
private A a;
}
MyThread myThread = new MyThread( aValue );
myThread.start();
答案 1 :(得分:1)
要启动某个主题,您必须拥有java.lang.Thread
的实例,其中b
不是。您可以扩展线程来实现此目的。
class b extends Thread {
线程以run()
方法放置的任何内容都是异步运行的,您可以从其原始(空)实现中覆盖它。
class b extends Thread {
@Override
public void run() {
}
}
但是,这不允许您传递a
的实例。这里你最好的选择是在a
的构造函数中将b
的实例作为实例变量。
class b extends Thread {
private final a _a;
public b(a _a) {
this._a = _a;
}
@Override
public void run() {
//now you can use _a here
}
}
最后,要异步运行线程,不要调用新实现的run()
方法,而是调用Thread#start()
,它在新线程中调用run()
方法。 / p>
class a {
public void ab() {
b thread = new b(this);
thread.start();
}
}
作为旁注,标准Java约定是使用大写字母启动类名,因此您应该将a
重命名为A
,依此类推。然而,就编译或执行而言,这不会有任何区别。