seems to work fine Both of your problems are a result of asynchronous work. If you call the putPerson method twice, they will both run near-simultaneously in separate background threads and both find-queries will most likely return almost at the same time, and definitely before the first call has saved the new person. In your example, the getPerson call will return before the background threads have been able to save your three people as well.
Parse.com - differencies between query.find( ) and query.findinBackground( )
To fix the issue you can do findInBackground() is executed in new background thread (is not a service is just a thread), since you already are in background thread is no need to call findInBackground() except if you have some specific requirements and you need multiple threads... So you can use findInBackground() from main thread and remove asynTask or you use find() inside asyTask if you have additional preprocessing or post processing that you must execute in background thread
Which thread do we get the call back on when calling findInBackground() on Parse android API
Hope that helps I think the callback method will execute on the thread you used to call findInBackground, so if that's the UI thread and you have more network to do there, you'll need to use other background threads. You can verify by calling the synchronous method and see if you get a NetworkOnMainThreadException (on a recent enough device).