Well if you have threads that may call the service and you are in the middle of calling destroy to remove the instance there can be problems, like the resurection of the Servlet and some others. So by making the destroy thread-safe, you make sure that you have a lock of the object, therefore disallowing any other calls to the object while you are in the destroy.
This also means that the thread that may call the service method needs to handle the possibility that the object is no longer in existence.
Note that the servlet API says that a servlet container will only call destroy "once all threads within the servlet's service method have exited or after a timeout period has passed." Once destroy has been called, the container should not send any more requests to the service method, no matter what destroy did. Bill
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