Unfortunately your question isn't all that useful for us to help you,(we would need code, etc. first) But I happen to be able to give 'broad' answers...
First question: "easiest" way... is completely subjective...
First of all you have LOTS AND LOTS of options on Android (more than even just normal Java)...
You could use standard java concurrency stuff...
you can use Android's HaMeR (Handlers, Messages, and Runnables) (so named from my PhD adviser, Dr Schmidt who has several CS Courses online that you can watch for free.. (playlist titled: CS 282 (2014): Concurrent Java Network Programming in Android
and CS 282 (2013): Systems Programming for Android
)
The fact that concurrency on android can make an entire university course(s) is a strong indicator as to how complex the topic is...
Depending on 'exactly' how you want the threads to communicate... I would personally recommend making a custom handler in the UI thread and giving that reference to the threads (if they report results to the UI thread) Or making a handler in each thread and letting the other thread reference it. (thereby giving the threads a mechanism to asyncly communicate back and forth.)
detailed video explaining Handlers
"easy" is subjective here...
Second Question:
You wouldn't communicate with the 'thread' behind the service... You would start the service and communicate with the service. The service would then communicate with the thread(s) that it is controlling.
I would personally recommend one-way asynchronous AIDL with custom callbacks for setting up a service (But that is a rather advanced method(Which I won't use any other means for bound service anymore because every other means is all vastly inferior in my opinion))
However until you get to that point, I would suggest just following the 1st question's approach of making handlers that allow you to pass messages back and forth, and then have the service 'report' the results to the Activity when it gets them (from one or more threads)