Skip to content

Instantly share code, notes, and snippets.

@JonasGao
Created August 16, 2017 14:19
Show Gist options
  • Save JonasGao/0df720c91c5fac0970df6c37deee376c to your computer and use it in GitHub Desktop.
Save JonasGao/0df720c91c5fac0970df6c37deee376c to your computer and use it in GitHub Desktop.
Simple thread safety testing (think from https://www.ibm.com/developerworks/cn/java/j-jtp06197.html)
package org.jonas.test;
public class NumberRange {
private int lower = 1, upper = 50;
public int getLower() { return lower; }
public int getUpper() { return upper; }
public void setLower(int value) {
if (value > upper)
throw new IllegalArgumentException("too large");
lower = value;
}
public void setUpper(int value) {
if (value < lower)
throw new IllegalArgumentException("too small");
upper = value;
}
}
package org.jonas.test;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class NumberRangeTest {
public static void main(String[] args) throws InterruptedException {
NumberRange numberRange = new NumberRange();
ScheduledExecutorService upperSetter = Executors.newSingleThreadScheduledExecutor();
upperSetter.schedule(() -> numberRange.setUpper(25), 5, TimeUnit.SECONDS);
ScheduledExecutorService lowerSetter = Executors.newSingleThreadScheduledExecutor();
lowerSetter.schedule(() -> numberRange.setLower(25), 5, TimeUnit.SECONDS);
upperSetter.shutdown();
lowerSetter.shutdown();
Thread.sleep(6000);
System.out.println(numberRange.getUpper());
System.out.println(numberRange.getLower());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment