Mike The simple answer is that synchronized on an instance method means that when the method is executed a lock is aquired on the object associated with the method - the 'this' in the method. And that no other threads can execute synchronized code on that object until the lock is released. For more info check out the java tutorial section on threads and monitors.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com