If you make create() synchronized, you'll fix the deadlock situation.
Deadlocks happen when multiple threads are all trying to lock the same two objects, but they try to lock them in a different order. In your code, the create() method locks "list", and then locks A.class (via the call to the static callCount() method.) On the other hand, the remove() method is synchronized so it locks A.class first, then locks "list". A deadlock occurs when two threads have each locked one of the two objects, and are waiting for the other one -- but they never get it, as another thread has the object each one wants.
I"m moving this to our "Threads and Synchronization" forum for any further discussion.