Updating a local variable within new threads
I am working on designing a multi-user application and would like to have a singleton service class that is shared amongst all of the user threads.
Within this class, I would like to have a method that does some heavy lifting to eventually compile a seperate list for each user, I am under the impression that since this is a method, each user thread will recieve its own sperate copy of this on its call stack.
Since this process is time consuming, I would like create multiple threads within the method to handle the processing and add items to a single list that was declared and instantiated within the method.
In the end I am envisioning a list complete list for each user that will then be able to be used throughout the rest of the application within the users thread.
My question is: How do accomplish sharing the list declared in the method amongst the multiple threads I want to create within the method while maintaining thread safety?
The flow chart below may explain everything better

java multithreading
|
show 2 more comments
I am working on designing a multi-user application and would like to have a singleton service class that is shared amongst all of the user threads.
Within this class, I would like to have a method that does some heavy lifting to eventually compile a seperate list for each user, I am under the impression that since this is a method, each user thread will recieve its own sperate copy of this on its call stack.
Since this process is time consuming, I would like create multiple threads within the method to handle the processing and add items to a single list that was declared and instantiated within the method.
In the end I am envisioning a list complete list for each user that will then be able to be used throughout the rest of the application within the users thread.
My question is: How do accomplish sharing the list declared in the method amongst the multiple threads I want to create within the method while maintaining thread safety?
The flow chart below may explain everything better

java multithreading
Why not use aFuture, implement the task, and avoid the issues of the Singleton?
– KevinO
Nov 15 '18 at 2:02
Local variables are only visible to one thread at a time, so they're normally used to isolate data that isn't shared between threads. To publish a local variable where other threads can see it, use Safe Publication: stackoverflow.com/questions/801993/…
– markspace
Nov 15 '18 at 2:34
Don't get confused though. If a local variable is a method parameter and that value was copied from some part of the code that is already public and visible to other threads, then (obviously) that data is shared. Only data/objects created locally is not shared.
– markspace
Nov 15 '18 at 2:37
Since the list represents something, I'd suggest making a class for that purpose. The list would then be defined as a thread safe instance variable. stackoverflow.com/questions/8203864/…
– robertf
Nov 15 '18 at 2:50
Well, we know next to nothing about the OP's actual problem, so I think it's a little premature to suggest implementations. I was going to suggest that the list be made not an instance variable, that it be kept local, and simple pass a reference to the specific threads that need to know about it. But I really don't know, because the OP's problem is so vague and general. The whole thing could be IO bound for example, and then threads don't help.
– markspace
Nov 15 '18 at 2:56
|
show 2 more comments
I am working on designing a multi-user application and would like to have a singleton service class that is shared amongst all of the user threads.
Within this class, I would like to have a method that does some heavy lifting to eventually compile a seperate list for each user, I am under the impression that since this is a method, each user thread will recieve its own sperate copy of this on its call stack.
Since this process is time consuming, I would like create multiple threads within the method to handle the processing and add items to a single list that was declared and instantiated within the method.
In the end I am envisioning a list complete list for each user that will then be able to be used throughout the rest of the application within the users thread.
My question is: How do accomplish sharing the list declared in the method amongst the multiple threads I want to create within the method while maintaining thread safety?
The flow chart below may explain everything better

java multithreading
I am working on designing a multi-user application and would like to have a singleton service class that is shared amongst all of the user threads.
Within this class, I would like to have a method that does some heavy lifting to eventually compile a seperate list for each user, I am under the impression that since this is a method, each user thread will recieve its own sperate copy of this on its call stack.
Since this process is time consuming, I would like create multiple threads within the method to handle the processing and add items to a single list that was declared and instantiated within the method.
In the end I am envisioning a list complete list for each user that will then be able to be used throughout the rest of the application within the users thread.
My question is: How do accomplish sharing the list declared in the method amongst the multiple threads I want to create within the method while maintaining thread safety?
The flow chart below may explain everything better

java multithreading
java multithreading
asked Nov 15 '18 at 2:01
oznomaloznomal
71111
71111
Why not use aFuture, implement the task, and avoid the issues of the Singleton?
– KevinO
Nov 15 '18 at 2:02
Local variables are only visible to one thread at a time, so they're normally used to isolate data that isn't shared between threads. To publish a local variable where other threads can see it, use Safe Publication: stackoverflow.com/questions/801993/…
– markspace
Nov 15 '18 at 2:34
Don't get confused though. If a local variable is a method parameter and that value was copied from some part of the code that is already public and visible to other threads, then (obviously) that data is shared. Only data/objects created locally is not shared.
– markspace
Nov 15 '18 at 2:37
Since the list represents something, I'd suggest making a class for that purpose. The list would then be defined as a thread safe instance variable. stackoverflow.com/questions/8203864/…
– robertf
Nov 15 '18 at 2:50
Well, we know next to nothing about the OP's actual problem, so I think it's a little premature to suggest implementations. I was going to suggest that the list be made not an instance variable, that it be kept local, and simple pass a reference to the specific threads that need to know about it. But I really don't know, because the OP's problem is so vague and general. The whole thing could be IO bound for example, and then threads don't help.
– markspace
Nov 15 '18 at 2:56
|
show 2 more comments
Why not use aFuture, implement the task, and avoid the issues of the Singleton?
– KevinO
Nov 15 '18 at 2:02
Local variables are only visible to one thread at a time, so they're normally used to isolate data that isn't shared between threads. To publish a local variable where other threads can see it, use Safe Publication: stackoverflow.com/questions/801993/…
– markspace
Nov 15 '18 at 2:34
Don't get confused though. If a local variable is a method parameter and that value was copied from some part of the code that is already public and visible to other threads, then (obviously) that data is shared. Only data/objects created locally is not shared.
– markspace
Nov 15 '18 at 2:37
Since the list represents something, I'd suggest making a class for that purpose. The list would then be defined as a thread safe instance variable. stackoverflow.com/questions/8203864/…
– robertf
Nov 15 '18 at 2:50
Well, we know next to nothing about the OP's actual problem, so I think it's a little premature to suggest implementations. I was going to suggest that the list be made not an instance variable, that it be kept local, and simple pass a reference to the specific threads that need to know about it. But I really don't know, because the OP's problem is so vague and general. The whole thing could be IO bound for example, and then threads don't help.
– markspace
Nov 15 '18 at 2:56
Why not use a
Future, implement the task, and avoid the issues of the Singleton?– KevinO
Nov 15 '18 at 2:02
Why not use a
Future, implement the task, and avoid the issues of the Singleton?– KevinO
Nov 15 '18 at 2:02
Local variables are only visible to one thread at a time, so they're normally used to isolate data that isn't shared between threads. To publish a local variable where other threads can see it, use Safe Publication: stackoverflow.com/questions/801993/…
– markspace
Nov 15 '18 at 2:34
Local variables are only visible to one thread at a time, so they're normally used to isolate data that isn't shared between threads. To publish a local variable where other threads can see it, use Safe Publication: stackoverflow.com/questions/801993/…
– markspace
Nov 15 '18 at 2:34
Don't get confused though. If a local variable is a method parameter and that value was copied from some part of the code that is already public and visible to other threads, then (obviously) that data is shared. Only data/objects created locally is not shared.
– markspace
Nov 15 '18 at 2:37
Don't get confused though. If a local variable is a method parameter and that value was copied from some part of the code that is already public and visible to other threads, then (obviously) that data is shared. Only data/objects created locally is not shared.
– markspace
Nov 15 '18 at 2:37
Since the list represents something, I'd suggest making a class for that purpose. The list would then be defined as a thread safe instance variable. stackoverflow.com/questions/8203864/…
– robertf
Nov 15 '18 at 2:50
Since the list represents something, I'd suggest making a class for that purpose. The list would then be defined as a thread safe instance variable. stackoverflow.com/questions/8203864/…
– robertf
Nov 15 '18 at 2:50
Well, we know next to nothing about the OP's actual problem, so I think it's a little premature to suggest implementations. I was going to suggest that the list be made not an instance variable, that it be kept local, and simple pass a reference to the specific threads that need to know about it. But I really don't know, because the OP's problem is so vague and general. The whole thing could be IO bound for example, and then threads don't help.
– markspace
Nov 15 '18 at 2:56
Well, we know next to nothing about the OP's actual problem, so I think it's a little premature to suggest implementations. I was going to suggest that the list be made not an instance variable, that it be kept local, and simple pass a reference to the specific threads that need to know about it. But I really don't know, because the OP's problem is so vague and general. The whole thing could be IO bound for example, and then threads don't help.
– markspace
Nov 15 '18 at 2:56
|
show 2 more comments
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53311377%2fupdating-a-local-variable-within-new-threads%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53311377%2fupdating-a-local-variable-within-new-threads%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Why not use a
Future, implement the task, and avoid the issues of the Singleton?– KevinO
Nov 15 '18 at 2:02
Local variables are only visible to one thread at a time, so they're normally used to isolate data that isn't shared between threads. To publish a local variable where other threads can see it, use Safe Publication: stackoverflow.com/questions/801993/…
– markspace
Nov 15 '18 at 2:34
Don't get confused though. If a local variable is a method parameter and that value was copied from some part of the code that is already public and visible to other threads, then (obviously) that data is shared. Only data/objects created locally is not shared.
– markspace
Nov 15 '18 at 2:37
Since the list represents something, I'd suggest making a class for that purpose. The list would then be defined as a thread safe instance variable. stackoverflow.com/questions/8203864/…
– robertf
Nov 15 '18 at 2:50
Well, we know next to nothing about the OP's actual problem, so I think it's a little premature to suggest implementations. I was going to suggest that the list be made not an instance variable, that it be kept local, and simple pass a reference to the specific threads that need to know about it. But I really don't know, because the OP's problem is so vague and general. The whole thing could be IO bound for example, and then threads don't help.
– markspace
Nov 15 '18 at 2:56