Synchronized LinkedHashed map
Yes there is a thread safety issue. While the getIterator() is synchronized, the Iterator it returns is not. LinkedHashMap supports removal through the values() view, and hence the Iterator can be used to modify the Map without proper synchronization.

  UserRecord userRecord = new UserRecord();
  populate(userRecord);

  Iterator iterator = userRecord.getIterator();

  iterator.next();
  iterator.remove(); // unsynchronized modification of the Map


The easiest solution is to use Collections.synchronizedMap() which basically does what you attempted. 

private Map&lt;String, ClientHandler&gt; container;

public UserRecord()
{
    container = Collections.synchronizedMap(new LinkedHashMap&lt;&gt;());
}


If you do this, the methods on UserRecord no longer need to be synchronized.

As an aside, you will want to properly use generics.