Do I need to wrap the above statements inside synchronized(list){ ...
}to make atomic operations?
Yes, otherwise yours Listcan be changed elsewhere in your code in the time window that you call containsand addthat can cause race condition problems .
Does that make me what good Collections.synchronizedList?
Collections.synchronizedList List , , . contains add, , , add, contains , . - , List .