Q:

What is the preferred way for a thread to communicate with the object that created it?

I have an object that creates 10 threads.
That object has a collection of Users.
Each of those threads can either check to see if a specific user exists, or can add/remove users from the collection.
I'm wondering as to how I should implement that communication.
Should I pass the collection of users into each thread via constructor or a method inside the threads?
Should I pass the main object into each thread so they can access the object's properties? Or maybe have specific methods inside the main object for handling the user collection that the threads will call?
I'm not sure what is the best practice in that situation.

A:

You're going to want to keep your User objects in a thread safe data structure, this will ensure that your threads don't encounter any race conditions during addition/removal of user objects.
You should take a look at the Concurrent Collections offered by java. You could also use a synchronized version of a standard java collection obtained via Collection.synchronizedCollection see here
It's fine to pass that data structure into the constructor of each thread so that you have access to the collection within each thread.

