I have a class like this , where I am updating a static variable in a thread. And I need to access this variable from another class.
import java.util.ArrayList;
import java.util.List;
public class VariableUpdater implements Runnable {
    static List < String > abc = new ArrayList < String > ();
    private static VariableUpdater instance = null;
    private VariableUpdater() {}
    public static synchronized VariableUpdater getInstance() {
        if (instance == null) {
            instance = new VariableUpdater();
        }
        return instance;
    }
    public static void main(String[] args) {
        Thread th = new Thread( VariableUpdater.getInstance());
        th.start();
    }
    @Override
    public void run() {
        while (true) {
            System.out.println();
            try {
                abc.add("aa");
                Thread.sleep(1000);
                printContent();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    }
    public synchronized void printContent() {
        for (String string: abc) {
            System.out.println(string);
        }
    }
}
And this variable needs to be accessed from another class like this :
public class Accessor {
    public static void main(String[] args) {
        VariableUpdater.getInstance().printContent();
    }
}
The problem is, when running the Accessor class the list is empty.
Am I missing something here?
UPDATE/Solution
It turns out we can achieve this by using Hazelcast or some sort of messaging/caching utility. I will post a full solution soon.