/threading-experiment

Interesting things happen when multiple threads act on the same data.

Primary LanguageJava

ThreadMadness

This is meant to show what can go wrong when two or more threads are acting on the same data at once.

int x = 4;

new Thread(this::methodThatIncrementsX()).start();

new Thread(this::methodThatDecrementsX()).start();

  • Runs this 1000 times.

Sample output:

5 4 5 4 4 5 5 4 5 4 5 4 5 4 5 4 3 4 3 5 4 5 6 4 3 4 5 6 5 4 3 4 5 4 3 4 5 4 5 4 5 6 4 5 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 6 5 4 3 4 5 6 5 4 5 6 7 6 7 6 5 6 5 6 5 6 5 6 5 4 5 4 3 4 5 4 3 4 3 4 3 2 3 4 5 4 5 4 5 4 5 4 3 5 4 4 3 4 4 3 4 5 4 3 5 3 4 4 5 4 5 6 5 4 5 5 6 4 3 4 5 4 5 4 5 6 5 5 4 6 5 4 5 6 5 6 7 6 5 6 5 4 5 4 3 4 3 4 3 2 3 4 3 4 4 5 5 5 4 4 5 4 5 4 3 4 5 4 5 4 5 6 5 4 5 6 5 6 7 6 5 6 7 6 5 6 5 6 5 4 5 4 3 4 5 4 5 3 4 2 3 4 5 4 5 4 5 4 5 4 3 4 4 3 5 6 5 5 4 4 3 5 4 4 5 4 5 4 5 4 5 4 5 4 5 6 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 3 4 5 4 4 5 6 5 4 5 6 5 4 5 6 5 6 5 4 5 4 5 4 5 6 4 5 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 3 4 3 4 5 4 5 4 5 6 7 6 5 4 3 4 3 4 3 4 5 4 5 6 6 7 5 4 3 4 5 6 5 5 4 4 4 5 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 5 4 6 5 4 5 4 5 4 3 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 3 4 5 4 3 4 5 4 5 5 6 4 5 4 3 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 3 4 3 4 4 5 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 2 3 4 5 4 5 4 5 4 5 4 5 6 5 6 5 4 5 4 5 4 5 4 5 4 3 4 3 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 4 3 5 4 5 4 5 4 5 6 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 6 4 5 5 4 5 4 5 6 4 5 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 3 4 3 4 5 4 5 5 4 6 5 4 3 4 5 4 5 4 5 4 5 4 5 5 6 4 5 4 5 6 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 3 4 5 6 5 6 5 4 3 4 3 4 3 4 5 4 5 4 5 4 4 5 5 4 5 6 4 5 5 4 5 4 5 4 5 6 4 5 4 5 5 4 5 4 5 4 5 4 5 4 3 4 4 3 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 6 5 4 3 4 5 6 5 4 3 2 4 3 3 4 5 4 3 4 5 4 5 4 3 4 3 4 5 4 5 4 3 4 3 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 6 6 4 5 5 5 5 4 5 4 5 4 5 6 5 4 5 4 3 4 5 6 5 4 5 4 5 6 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 6 5 4 3 4 5 4 5 4 3 2 3 3 2 4 5 4 3 4 3 4 3 4 3 4 3 4 3 4 5 4 5 4 5 4 5 4 3 5 4 4 5 4 5 4 5 4 3 4 5 4 3 4 3 4 5 6 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 6 5 6 5 4 5 4 5 4 5 6 5 4 5 4 5 4 3 4 5 4 3 4 5 4 5 4 5 4 5 6 5 6 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 5 4 4 5 6 5 4 5 4 5 6 5 4 3 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 3 4 4 5 4 5 4 5 6 5 4 5 6 5 6 5 4 3 4 5 4 5 4 5 4 5 6 5 4 5 4 3 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 6 5 4 3 4 3 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 6 5 4 5 4 5 5 4 4 5 4 5 4 5 6 7 6 7 5 6 4 5 4 3 4 5 4 5 4 5 4 3 4 5 4 3 4 5 4 5 4 3 4 5 4 3 4 5 4 5 4 5 4 3 4 5 6 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 3 4 4 3 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 4 3 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 3 4 5 6 5 6 5 4 5 6 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 3 4 5 4 5 4 5 5 4 4 3 5 4 4 6 5 4 5 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 2 3 4 3 4 3 4 5 4 5 4 5 6 5 3 4 4 5 6 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 3 2 3 2 3 4 3 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 6 5 4 5 6 5 4 3 4 5 4 5 4 3 4 3 4 3 4 5 4 5 6 5 4 3 4 5 4 5 6 5 4 5 5 4 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 5 4 5 4 5 4 5 4 5 4 5 4 5 3 4 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 3 4 5 6 5 6 5 4 5 6 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 3 4 5 4 5 4 5 4 5 4 5 4 3 4 3 4 3 4 5 6 5 4 5 4 3 4 5 4 5 4 5 4 5 6 5 6 5 6 5 6 5 4 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 7 6 5 6 5 6 5 4 5 4 5 4 5 6 5 6 5 4 5 4 5 4 3 4 3 4 5 4 5 4 3 4 3 4 3 4 5 6 7 8 9 8 7 8 7 8 7 6 5 6 7 6 7 8 7 8 9 8 7 8 9 8 9 8 9 11 9 7 10 6 6 5 8 6 7 9 8 10 5 6 7 8 7 6 5 4 5 4 8 7 6 5 4 5 6 5 3 4 7 6 4 3 4 3 2 3 2 3 2 2 3 3 2 5 1 2 1 2 1 2 3 2 3 6 4 7 5 6 5 4 5 4 5 6 5 4

Process finished with exit code 0

Trippy!

(We started at 4 and ended up with many other values each iteration.)