Java 如何在一个方法中检测同一类中的另一个方法更新了一个类变量?

Java 如何在一个方法中检测同一类中的另一个方法更新了一个类变量?,java,Java,(新手警告) 我有一个类MyClass,它实现了一个监听器接口(SomeListener)。 MyClass包含两个计数器,countA和countB。MyClass作为侦听器添加到另一个类中。当OtherClass中发生某些事情时,它会激发MyClass方法incrementA或incremenetB MyClass还有一个从ThirdClass调用的方法myMethod。然后它向服务器发送一个请求列表。服务器为每个请求响应OtherClass。OtherClass然后激发incrementA

(新手警告)

我有一个类MyClass,它实现了一个监听器接口(SomeListener)。 MyClass包含两个计数器,countA和countB。MyClass作为侦听器添加到另一个类中。当OtherClass中发生某些事情时,它会激发MyClass方法incrementA或incremenetB

MyClass还有一个从ThirdClass调用的方法myMethod。然后它向服务器发送一个请求列表。服务器为每个请求响应OtherClass。OtherClass然后激发incrementA或incrementB

我的问题是:我更希望我的方法只在服务器响应OtherClass的所有请求后返回。我好像没法让它工作。这是到目前为止我的代码的草图:

class MyClass implements SomeListener{

    private int counterA;
    private int counterB;
    private int numRequests;

    public boolean myMethod(){

        // send numRequests number of requests to a serve

        long start = System.currentTimeMillis();
        long end = start + 1000*numObjects;

        //wait for responses to all the requests, or timeout
        while(counterA+counterB < numRequests &&  currenttime<end){
            //wait... in a probably not so elegant fashion
        }

        if(counterA+counterB==numRequests){
            // do something
            return true
        }

        // timed out
        //do something else
        return false;
    }


    public void incrementA(){
        counterA++;
    }

    public void incrementB(){
        counterB++;
    }
}


class SomeListener{
    public void incrementA();
    public void incrementB();
}


class OtherClass{

    MyClass myClassObject = new myClassObject();

    //receives response from server and write to log

    if(response equals something)
        myClassObject.incrementA;
    else    
        myClassObject.incrementB;
}


class ThirdClass{

    MyClass myClassObject = new MyClassObject();
    if (myClassObject.myMethod()){
        // do something
    }
}
class MyClass实现了SomeListener{
私人int counterA;
私人int计数器B;
私人国际请求;
公共布尔myMethod(){
//向服务发送numRequests请求数
长启动=System.currentTimeMillis();
长端=开始+1000*个项目;
//等待所有请求的响应,或超时

当(counterA+counterB 一种方法是创建倒计时锁存器并在
myMethod
中等待它, 然后在
increment
方法中倒计时闩锁。请注意,只有在一次只有一个线程可以进入
myMethod


有关如何使用它的详细信息,请参见。

请发布将编译并演示问题的代码;a.问题中的代码不会编译,因为至少在一些地方您引用了函数而没有调用它们,在类体中编写了没有封闭方法的分步代码,等等。基本上:提供
i当运行
myMethod
时,另一个线程调用ncrementA
incrementB
myMethod
最终将看到值的变化。如果您使
counterA
counterB
易失性
,您将使
myMethod
立即看到这些变化。@T.J.crower我将更新e如果你把它写下来作为一个答案。对不起,StackExchange新手,下次会给出一个可运行的例子:)谢谢,让计数器变为易变的,似乎:)我很困惑,有时这个方法实际上注意到了计数器的变化,但大多数时候它没有。