Java 在需要参数的新线程中调用class.method
好的,现在我有了基本的代码:Java 在需要参数的新线程中调用class.method,java,multithreading,Java,Multithreading,好的,现在我有了基本的代码: 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 } } 然而,这并没有在一个新线程中打开它,是的,我做了研究,我发现的所有解决方案
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
}
}
然而,这并没有在一个新线程中打开它,是的,我做了研究,我发现的所有解决方案都没有留下任何选项来向bb方法发送一个参数(这个)
如何在需要参数的新线程中调用class.method?问题是“如何在需要参数的新线程中调用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();
问题是“如何在需要参数的新线程中调用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();
要启动线程,您必须有一个
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()
方法
class a {
public void ab() {
b thread = new b(this);
thread.start();
}
}
作为旁注,标准Java约定是以大写字母开头类名,因此您应该将
a
重命名为a
,以此类推。但是,这对编译或执行没有任何影响。要启动线程,必须有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()
方法
class a {
public void ab() {
b thread = new b(this);
thread.start();
}
}
作为旁注,标准Java约定是以大写字母开头类名,因此您应该将
a
重命名为a
,以此类推。但是,这对编译或执行没有任何影响。你研究了什么?、经历了这个你研究了什么?、经历了这个好的,我的第一个问题是,我已经尝试了所有这些,当我执行线程时。start()只是一个错误,说start不存在。第二个问题是,这不会创建一个新的实例吗?我需要已经运行的特定实例,因为它是您需要在class b
中扩展线程的GUI,以便start
存在。这不会创建a
的新实例,因为所包含的This
是作为参数传递的。谢谢大家的帮助,但是忘了java吧,这是一个语言笑话。好吧,我的第一个问题是,当我执行该线程时,我已经尝试了所有这些。start()只是一个错误,说start不存在。第二个问题是,这不会创建一个新的实例吗?我需要已经运行的特定实例,因为它是您需要在class b
中扩展线程的GUI,以便start
存在。这不会创建a
的新实例,因为所包含的This
作为参数传递。感谢大家的帮助,但忘了java,这是一个语言笑话。我将行拆分为更显式:构造函数调用我将行拆分为更显式:构造函数调用