The problem is probably the Thread accessing the list. It is most likely not supposed to be caught up in some kind of Listener-resolution, which is why there is no proper way of attaching a listener to the list.
However, if you have control over the SharedEntiry class, you could 'hack' into the list's access by using synchronized. However you expressly stated, that the list could be recreated, so I assume the instance stored behind values can actually be replaced.
Basically you have three cases:
1 The values-List is replaced by a new List:
Solve this by making a second reference on List:
private List<Map<String,Object>> valuesPrevious;
Whenever you check for change, check for identity of the lists first. If they are a mismatch, you can be sure the list changed (at least the instance, if not the content).
if (values != valuesPrevious) {
// handle change.
}
Yes, you still need to periodically check, but an identity-comparison is relatively cheap, and therefore an affordable thread to run in the background.
2 The values-List is replaced by a new List (of a type you did not set):
If that occures, move all values from the API's list to an instance of your observable list (described below), set values to that instance and wait for the next change to occure.
3 The values changed, but the instance is the same:
Solve this by using an ObservableList (if you are implementing in Java10+ https://docs.oracle.com/javase/10/docs/api/javafx/collections/ObservableList.html) or by implementing such a List yourself (probably by extending an existing List type).
Then, that listener only sets a 'dirty' flag, and your method knows that a change occured (and resets the flag).
In any way, my suggestion would be to ensure, that the Thread handling the change only triggers another Thread to handle the change, rather than lock the accessing thread, since I suspect, that your @BindMagic-API has some sort of runtime-relevant factor (for example, it is a network or database related shadow of something).
If you simply lock the thread, until you have handled your reaction, you might get weird effects, disconnects or end up accidentally blocking the server you are accessing.