css
python
mysql
android
ruby-on-rails
regex
objective-c
eclipse
silverlight
flash
html5
json
perl
cocoa
tsql
apache
php5
jsp
postgresql
We use threads only if we wish to do long computation tasks in the background.Main task is always the main thread.You can spawn other thread instances from it.you can make your second and third class runnable and use a thread to run them.In your case you need to wait for the threads to finish e.g only after retieval of your collections in your main thread,you can start the second thread and similarly you should wait for the second thread to complete before doing the third thread
There are two things that i can see you are worried about here and Java has two things to resolve them:
Thread.start()
Thread.run()
Executor
ExecutorService
I am sure a lot of whats going on in your head wil be solved by this