When a code block is labeled as synchronised then only one thread can execute the containing code at a time, so there is a lock on the synchronised block. If other threads are also trying to execute that code they will be queued and then the next thread will be able to access it once the first thread has finished executing the code and released the lock.

So you should only use Vector if multiple threads are going to be hitting it, if not go with ArrayList.