package com.example.sync;

public class VolatileTest {

	private static volatile  int MY_INT = 0;
	
	static class ChangeListener extends Thread {
		@Override
		public void run() {
			int local_value = MY_INT;
			while (local_value < 5) {
				if (local_value != MY_INT) {
					System.out.println("Got change for MY_INT: " + MY_INT);
					local_value = MY_INT;
				}
			}
		}
	}
	
	static class ChangeMaker extends Thread {
		@Override
		public void run() {
			int local_value = MY_INT;
			while (local_value < 5) {
				System.out.println("Incrementing MY_INT: " + (local_value + 1));
				MY_INT = ++local_value;  // pre-increment
				try {
					Thread.sleep(500);
				} catch (InterruptedException ex) {}
			}
		}
	}
	
	public static void main(String[] args) {
		new ChangeListener().start();
		new ChangeMaker().start();
	}

}
