AtomicBoolean做什么,一个volatile布尔无法实现?
我有这段代码:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,这是一个超时功能,超时由另一个条件刷新.我的问题是x> = RaftNode.limit条件保持触发,即使它是假的(通过print语句).
我的控制台输出:
1431532870542
1431532872508 THIS SHOULD BE LESS THAN
1431532870542 THIS
Run Code Online (Sandbox Code Playgroud)
因此x确实是当前时间,但即使它小于限制,也会触发条件.
我不知道为什么!
限制变量是
public static long limit;
Run Code Online (Sandbox Code Playgroud)
所以没什么好奇的
我正在尝试将装饰器编写到现有的类中,如果没有足够的可用资源则拒绝该类.这是一个没有多线程的代码示例版本:
public interface Handler {
boolean handleTask(Task myTask); // returns true if successful, false if failure
}
public interface Task {
int getResources();
// Among other things
}
public BlockingHandler implements Handler {
private int occupied;
private final int limit;
private final Handler backingHandler;
BlockingHandler(Handler backingHandler) {
this.backingHandler = backingHandler;
}
@Override
public boolean handleTask(Task myTask) {
if(myTask.getResources() + occupied > limit) return false;
occupied += myTask.getResources();
return backingHandler.handleTask(myTask);
}
// Don't worry about this part, I'm not doing it …Run Code Online (Sandbox Code Playgroud) 我需要在运行时设置一个布尔变量,可以被任何其他类访问(无需将变量从类传递给类).此变量将是配置设置,并将取决于用户在运行时设置的某些值.
我怀疑单身是可行的方式,但是早上花了很多时间阅读它,我似乎找到了很多关于创建它们的最佳方法的例子(和参数),而没有提到如何实际使用它们.
单身是解决这个问题的方法吗?
如果是这样,任何人都可以提供一个单例的例子,它可以设置一个布尔值,可以从任何其他类静态访问吗?
编辑:我是一个白痴(完全过于复杂的问题,并错过了最简单的解决方案).
public static volatile boolean yourBoolean; 看起来它会完美运作