Updating a local variable within new threads










0















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



enter image description here










share|improve this question






















  • 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















0















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



enter image description here










share|improve this question






















  • 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













0












0








0








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



enter image description here










share|improve this question














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



enter image description here







java multithreading






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 '18 at 2:01









oznomaloznomal

71111




71111












  • 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

















  • 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
















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












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
);



);













draft saved

draft discarded


















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















draft saved

draft discarded
















































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.




draft saved


draft discarded














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





















































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







這個網誌中的熱門文章

What does pagestruct do in Eviews?

Dutch intervention in Lombok and Karangasem

Channel Islands