Java7:IF条件为假时触发
Java 7: IF condition triggered when false
我有这段代码:
void timerCountDown(){
while(RaftNode.getTimeoutVar()){
long x = System.currentTimeMillis();
if(x >= RaftNode.limit){
System.out.println(x);
System.out.println(RaftNode.limit + " THIS SHOULD BE LESS THAN");
System.out.println(System.currentTimeMillis() + " THIS");
System.out.println("TIMED OUT");
raft.RaftNode.setTimeoutVar(false);
nextRandomTimeOut();
raft.RaftNode.onTimeOut();
}
}
}
所以基本上,这是一个超时功能,超时由另一个条件刷新。我的问题是 x >= RaftNode.limit 条件一直触发,即使它是假的(通过打印语句)。
我的控制台输出:
1431532870542
1431532872508 THIS SHOULD BE LESS THAN
1431532870542 THIS
所以x确实是当前时间,但即使小于限制,也正在触发条件。
我不知道为什么!
极限变量是
public static long limit;
所以没什么特别的
你能试试下面的方法吗?
void timerCountDown(){
long limit = RaftNode.limit;
long raft_time = RaftNode.getTimeoutVar();
long x = System.currentTimeMillis();
while(raft_time){
x = System.currentTimeMillis();
if(x >= limit){
System.out.println(x);
System.out.println(limit + " THIS SHOULD BE LESS THAN");
System.out.println(x + " THIS");
System.out.println("TIMED OUT");
raft.RaftNode.setTimeoutVar(false);
nextRandomTimeOut();
raft.RaftNode.onTimeOut();
}
raft_time=RaftNode.getTimeoutVar();
}
}
只能是使用线程的问题。可以延迟共享变量值的更新。使限制不稳定。
这基本上是一个线程问题,对 java volatile 的搜索将进一步指出。相当愚蠢,但线程可以拥有由另一个线程更改的某些变量的陈旧值。使用 volatile 时,编译器会使用额外的代码确保线程获得更新的值。将变量值复制到线程中可能被视为优化问题。不过再看看JIT,LL2缓存等等。
(作为评论开始。)
我有这段代码:
void timerCountDown(){
while(RaftNode.getTimeoutVar()){
long x = System.currentTimeMillis();
if(x >= RaftNode.limit){
System.out.println(x);
System.out.println(RaftNode.limit + " THIS SHOULD BE LESS THAN");
System.out.println(System.currentTimeMillis() + " THIS");
System.out.println("TIMED OUT");
raft.RaftNode.setTimeoutVar(false);
nextRandomTimeOut();
raft.RaftNode.onTimeOut();
}
}
}
所以基本上,这是一个超时功能,超时由另一个条件刷新。我的问题是 x >= RaftNode.limit 条件一直触发,即使它是假的(通过打印语句)。
我的控制台输出:
1431532870542
1431532872508 THIS SHOULD BE LESS THAN
1431532870542 THIS
所以x确实是当前时间,但即使小于限制,也正在触发条件。
我不知道为什么!
极限变量是
public static long limit;
所以没什么特别的
你能试试下面的方法吗?
void timerCountDown(){
long limit = RaftNode.limit;
long raft_time = RaftNode.getTimeoutVar();
long x = System.currentTimeMillis();
while(raft_time){
x = System.currentTimeMillis();
if(x >= limit){
System.out.println(x);
System.out.println(limit + " THIS SHOULD BE LESS THAN");
System.out.println(x + " THIS");
System.out.println("TIMED OUT");
raft.RaftNode.setTimeoutVar(false);
nextRandomTimeOut();
raft.RaftNode.onTimeOut();
}
raft_time=RaftNode.getTimeoutVar();
}
}
只能是使用线程的问题。可以延迟共享变量值的更新。使限制不稳定。
这基本上是一个线程问题,对 java volatile 的搜索将进一步指出。相当愚蠢,但线程可以拥有由另一个线程更改的某些变量的陈旧值。使用 volatile 时,编译器会使用额外的代码确保线程获得更新的值。将变量值复制到线程中可能被视为优化问题。不过再看看JIT,LL2缓存等等。
(作为评论开始。)