Java 7:错误时触发IF条件

时间:2015-05-13 16:11:52

标签: java if-statement java-7

我有这段代码:

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条件保持触发,即使它是假的(通过print语句)。

我的控制台输出:

1431532870542
1431532872508 THIS SHOULD BE LESS THAN
1431532870542 THIS

因此x确实是当前时间,但即使它小于限制,也会触发条件。

我不明白为什么!

极限变量是

public static long limit;

所以没什么好看的

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容吗?

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();
    }
}

答案 1 :(得分:1)

使用线程只能是一个问题。可以延迟共享变量值的更新。限制挥发性左右。

这基本上是一个线程问题,对java volatile的搜索将进一步指出。相当愚蠢但是线程可以具有由另一个线程改变的某个变量的陈旧值。使用volatile,编译器可以确保线程获得更新值的额外代码。将变量值复制到线程中可能会被视为优化问题。但是再看看JIT,LL2缓存等等。

(以评论开头。)

相关问题