我想知道应该怎么做: 我有一个A和B类
public class A {
int result;
int a;
public A(){
result =0;
a = 5;
B myB= new B();
System.out.println(result);
}
public void main(){
A myA= new A();
}
}
public class B extends Thread {
public B(){
start();
}
public void run() {
addition1();
}
public void addition1() {
////////HERE trying to do///////
result = a+5;
}
}
不幸的是,我需要使用,优选两个类,并且必须有两个线程,并且将在第二个线程中执行添加并更新第一个线程。 这只是我来的一个例子,显示了我的问题。我真正的代码太长了,无法在这里发布。 感谢
答案 0 :(得分:0)
我假设当你说你想要从一个线程更新到另一个线程时,你应该将A类作为Thread或Runnable对象的扩展。但是,示例中的A类不是Thread扩展,可以通过B(另一个线程)中的操作以通常的方式更新,就像您可以在多线程方案中更新共享变量一样。只需在A类中公开结果变量的setter方法,然后从在新线程中运行的B类方法(addition1)更新它。因此,您将更新由另一个线程(在构建B类期间生成)的主线程(第一个线程)操作的共享实例(A类)(add1)
答案 1 :(得分:0)
您可以尝试使用回调机制将结果返回到计算结果中。
有关详细信息,请阅读内联评论。
示例代码:
interface Callback {
public void execute(int result);
}
// make it abstract and don't provide implementation of execute method here
abstract class B extends Thread implements Callback {
private A a;
// pass the reference of Class A to access it
public B(A a) {
this.a = a;
start();
}
public void run() {
addition1();
}
public void addition1() {
int result = a.a + 5;
//result is computed now call pass the value to the waiter and that's A
execute(result);
}
}
class A {
int result;
int a;
public A() {
result = 0;
a = 5;
B myB = new B(this) {// pass the reference of Class A
@Override
public void execute(int result) {
// This is the computed result that is returned from Class B
System.out.println(result);
}
};
}
}