import java.util.Random; public class InvariantBreaking { final static int MIN=0, MAX=100; private volatile int lower=MIN, upper=MAX; // upper must be bigger than lower int nbrInconsistencies=0; public void setLower(int value) { if (value > upper) return; // don't change value lower = value; } public void setUpper(int value) { if (value < lower) return; // don't change value upper = value; } public boolean checkInvariant(){ if (upper < lower){ System.err.println("Invariant is broken! upper < lower ("+upper+" < "+lower+")"); nbrInconsistencies++; } return upper < lower; } public String toString(){ return "["+lower+", "+upper+"] "+nbrInconsistencies+" inconsistencies"; } /** * STANDALONE PROGRAM */ public static void main(String[] args) { final InvariantBreaking invariantBreaking = new InvariantBreaking(); final int NBR_THREADS=4; for(int i=0;i