So I have a SomeTask class which extends Thread, and it has Map and List fields. What would be the behavior when you don’t do Collections.synchronizedXXX and you have multiple thread of SomeTask running?
Once a Map is called from the database (I am using Object Database to directly store POJO), would I need to synchronized the Map object returned from this database as well?
Map SomeTasksOwnMap = Collections.synchronizedMap(MapReturnedFromDatabase);
Collections.synchronizedXXXis required when 2 or more Threads are accessing the same Map/List.If your task doesn’t access other tasks Map/List, then there is no need to synchronize them.
Example.
These two tasks have individual lists that do not require synchronization.
Example require synchronization.
To answer the questions: “What would be the behavior when you don’t”, you could lose one of the writes if it was timed that both threads wanted to write to index ‘x’.
You may also have a null value in the list as the size of the array was increased before the write to the location was done.
Basically you would have an inconsistent view.