There are two types of managing EntityManager: container managed and application managed. For application managed, the preferred method of obtaining EntityManager is through EntityManagerFactory. Java EE tutorial says this:
Container-Managed Entity Managers
With a container-managed entity
manager, an EntityManager instance’s persistence context is
automatically propagated by the container to all application
components that use the EntityManager instance within a single Java
Transaction API (JTA) transaction.
JTA transactions usually involve calls across application components.
To complete a JTA transaction, these components usually need access to
a single persistence context. This occurs when an EntityManager is
injected into the application components by means of the
javax.persistence.PersistenceContext annotation. The persistence
context is automatically propagated with the current JTA transaction,
and EntityManager references that are mapped to the same persistence
unit provide access to the persistence context within that
transaction. By automatically propagating the persistence context,
application components don’t need to pass references to EntityManager
instances to each other in order to make changes within a single
transaction. The Java EE container manages the lifecycle of
container-managed entity managers.
To obtain an EntityManager instance, inject the entity manager into
the application component:
@PersistenceContext
EntityManager em;
Application-Managed Entity Managers
With an application-managed entity manager, on the other
hand, the persistence context is not propagated to application
components, and the lifecycle of EntityManager instances is managed by
the application.
Application-managed entity managers are used when applications need to
access a persistence context that is not propagated with the JTA
transaction across EntityManager instances in a particular persistence
unit. In this case, each EntityManager creates a new, isolated
persistence context. The EntityManager and its associated persistence
context are created and destroyed explicitly by the application. They
are also used when directly injecting EntityManager instances can’t be
done because EntityManager instances are not thread-safe.
EntityManagerFactory instances are thread-safe.
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html