在不同线程上访问父类的类

时间:2014-05-17 20:13:12

标签: java multithreading variables subclass superclass

我想知道应该怎么做: 我有一个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;

    }
}

不幸的是,我需要使用,优选两个类,并且必须有两个线程,并且将在第二个线程中执行添加并更新第一个线程。 这只是我来的一个例子,显示了我的问题。我真正的代码太长了,无法在这里发布。 感谢

2 个答案:

答案 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);
            }
        };
    }
}