As you said, the list is already synchronized, so your removeString method removeString not be synchronized either.
Note that if one of your methods contains a non-atomic operation (let's say you want to check if your list contains something and then change the list accordingly), you may need to add another level of synchronization.
Finally, you did not seem to notice that this method:
public synchronized void removeString(String s)
synchronizes with another lock (it synchronizes to this ). So, back to the example above, you would write it down:
public void someMethod() { synchronized(listOfString) {
source share