The synchronization being discussed there is the same as synchronization in threads. Some collections have synchronized methods to make the more
thread safe. Others do not.. There is some overhead associated with synchronization and so in a single threaded environment those collections are needlessly synchronized and less efficient than their newer counterparts.
And in a multi threaded environment they don't do a complete job of synchronization so you have to do your own additional synchronization. There are better thread-safe options for collections than Hashtable and Vector, so they don't make sense in a multi threaded environment either.
Finally, Hashtable and Vector were around before the whole collections framework was developed, and were sort of retrofitted into the framework. they never really fit properly into the framework itself ( having enumerators for example ). I think of this point as being the best reason for not using Hashtable and Vector. The collections framework is really flexible, but you lose some of that when you are tied to the old classes.
The point about synchronization and it's efficiency losses is minor, it isn't that expensive to tack synchronization on in a single threaded environment, because the cases where it costs the most is in multi threaded environments. And in those environments it isn't a question of to synchronize or not, but rather the method and manner you use for synchronization. And there are frankly much better options available.