Java 如何在一个方法中检测同一类中的另一个方法更新了一个类变量?
(新手警告) 我有一个类MyClass,它实现了一个监听器接口(SomeListener)。 MyClass包含两个计数器,countA和countB。MyClass作为侦听器添加到另一个类中。当OtherClass中发生某些事情时,它会激发MyClass方法incrementA或incremenetB MyClass还有一个从ThirdClass调用的方法myMethod。然后它向服务器发送一个请求列表。服务器为每个请求响应OtherClass。OtherClass然后激发incrementA或incrementB 我的问题是:我更希望我的方法只在服务器响应OtherClass的所有请求后返回。我好像没法让它工作。这是到目前为止我的代码的草图:Java 如何在一个方法中检测同一类中的另一个方法更新了一个类变量?,java,Java,(新手警告) 我有一个类MyClass,它实现了一个监听器接口(SomeListener)。 MyClass包含两个计数器,countA和countB。MyClass作为侦听器添加到另一个类中。当OtherClass中发生某些事情时,它会激发MyClass方法incrementA或incremenetB MyClass还有一个从ThirdClass调用的方法myMethod。然后它向服务器发送一个请求列表。服务器为每个请求响应OtherClass。OtherClass然后激发incrementA
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新手,下次会给出一个可运行的例子:)谢谢,让计数器变为易变的,似乎:)我很困惑,有时这个方法实际上注意到了计数器的变化,但大多数时候它没有。