Reputation: 73
I am implementing a multi-threaded program in Java, where each thread
is of a type class Node extends Thread
.
All these classes generate certain values which will be used by other classes.
For main
it's easy to get the values from the generated threads
, but from within threads
itself, how can I get the values on other threads
?
//Start the threads from a list of objects
for (int i = 0; i < lnode.size(); i++) {
lnode.get(i).start();
}
thanks
Upvotes: 7
Views: 13964
Reputation: 26012
You can use ThreadLocal to share variables. The definition of ThreadLocal is shown below :
Thread Local can be considered as a scope of access, like a request scope or session scope. It’s a thread scope. You can set any object in Thread Local and this object will be global and local to the specific thread which is accessing this object.
You can find more information here.
Upvotes: -1
Reputation: 39960
If you do something like:
class MyThreadRunnable implements Runnable {
List<String> strings;
MyThreadRunnable(List<String> strings) {
this.strings = strings;
}
public void run() {
strings.add(getName());
}
}
// ...
List<String> sharedStrings = new ArrayList<String>();
Thread t1 = new Thread(new MyThreadRunnable(sharedStrings));
Thread t2 = new Thread(new MyThreadRunnable(sharedStrings));
t1.start();
t2.start();
then both t1
and t2
(two different threads of the same type) will be using the same list, and see changes to it made from the other thread.
Actually, since I'm not using any synchronisation for brevity, it's also possible this would corrupt the list in some unpredictable way and cause weird errors. I strongly encourage you investigate process synchronisation, and the java.util.concurrent
package when working with concurrency.
Upvotes: 5
Reputation: 325
If are threads of the same process/jvc instance you will not need "shared memory", you only need a reference for your data inside your treads, for example via constructor or static reference. But you will need a synchronization / control access mechanism if more than one thread writes on that data.
Upvotes: 3
Reputation: 65831
It sounds like you are looking for a ConcurrentHashMap but without a little more detail it is difficult to tell.
What kind of data are you hoping to share between these threads and how will they need to share it?
BTW - It is generally considered better to implement Runnable
than to extend Thread
.
Upvotes: 1