how to Continous loop collection without concurrentmodificationexception
Please read the text carefully, the title isn't so good, but i couldn't think something easier to describe the problem.
This is a theorical problem, i will use java to demonstrate but the solution i need is more like a design pattern so it could be thougth for any language.
A program has 2 threads:
thread A - interacts with user, who can add or remove items to a set
thread B - continously iterate over a Set performing tasks over its items
How can i perform this scenario without having ConcurrentModificationException
?
final Set<String> set = new HashSet();
//A
new Thread(new Runnable(){
public void run(){
while(true){
//user adds or remove items to set
}
}
}).start();
new Thread(new Runnable(){
public void run(){
while(true){
for(String s : set){
//do stuff
}
}
}
}).start();
This is a very commum scenario there shall be a design pattern to handle it
java multithreading concurrency concurrentmodification
add a comment |
Please read the text carefully, the title isn't so good, but i couldn't think something easier to describe the problem.
This is a theorical problem, i will use java to demonstrate but the solution i need is more like a design pattern so it could be thougth for any language.
A program has 2 threads:
thread A - interacts with user, who can add or remove items to a set
thread B - continously iterate over a Set performing tasks over its items
How can i perform this scenario without having ConcurrentModificationException
?
final Set<String> set = new HashSet();
//A
new Thread(new Runnable(){
public void run(){
while(true){
//user adds or remove items to set
}
}
}).start();
new Thread(new Runnable(){
public void run(){
while(true){
for(String s : set){
//do stuff
}
}
}
}).start();
This is a very commum scenario there shall be a design pattern to handle it
java multithreading concurrency concurrentmodification
maybe a docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
– Scary Wombat
Nov 21 '18 at 6:57
add a comment |
Please read the text carefully, the title isn't so good, but i couldn't think something easier to describe the problem.
This is a theorical problem, i will use java to demonstrate but the solution i need is more like a design pattern so it could be thougth for any language.
A program has 2 threads:
thread A - interacts with user, who can add or remove items to a set
thread B - continously iterate over a Set performing tasks over its items
How can i perform this scenario without having ConcurrentModificationException
?
final Set<String> set = new HashSet();
//A
new Thread(new Runnable(){
public void run(){
while(true){
//user adds or remove items to set
}
}
}).start();
new Thread(new Runnable(){
public void run(){
while(true){
for(String s : set){
//do stuff
}
}
}
}).start();
This is a very commum scenario there shall be a design pattern to handle it
java multithreading concurrency concurrentmodification
Please read the text carefully, the title isn't so good, but i couldn't think something easier to describe the problem.
This is a theorical problem, i will use java to demonstrate but the solution i need is more like a design pattern so it could be thougth for any language.
A program has 2 threads:
thread A - interacts with user, who can add or remove items to a set
thread B - continously iterate over a Set performing tasks over its items
How can i perform this scenario without having ConcurrentModificationException
?
final Set<String> set = new HashSet();
//A
new Thread(new Runnable(){
public void run(){
while(true){
//user adds or remove items to set
}
}
}).start();
new Thread(new Runnable(){
public void run(){
while(true){
for(String s : set){
//do stuff
}
}
}
}).start();
This is a very commum scenario there shall be a design pattern to handle it
java multithreading concurrency concurrentmodification
java multithreading concurrency concurrentmodification
asked Nov 21 '18 at 6:43
Rafael LimaRafael Lima
450416
450416
maybe a docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
– Scary Wombat
Nov 21 '18 at 6:57
add a comment |
maybe a docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
– Scary Wombat
Nov 21 '18 at 6:57
maybe a docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
– Scary Wombat
Nov 21 '18 at 6:57
maybe a docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
– Scary Wombat
Nov 21 '18 at 6:57
add a comment |
2 Answers
2
active
oldest
votes
You could use CopyOnWriteArraySet
For example
Set<Integer> threadSafeSet = new CopyOnWriteArraySet<>();
The above set can now be accessed from any thread without ConcurrentModificationException
s. But its not realtime i.e the set can change and this wont be reflected in an ongoing iteration. This a drawback for the benefit of a thread safe iterator
add a comment |
What's the point of iterating infinitely? Maybe it's enough to iterate over set when it has changed? Then you could use observer pattern.
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
add a comment |
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%2f53406547%2fhow-to-continous-loop-collection-without-concurrentmodificationexception%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You could use CopyOnWriteArraySet
For example
Set<Integer> threadSafeSet = new CopyOnWriteArraySet<>();
The above set can now be accessed from any thread without ConcurrentModificationException
s. But its not realtime i.e the set can change and this wont be reflected in an ongoing iteration. This a drawback for the benefit of a thread safe iterator
add a comment |
You could use CopyOnWriteArraySet
For example
Set<Integer> threadSafeSet = new CopyOnWriteArraySet<>();
The above set can now be accessed from any thread without ConcurrentModificationException
s. But its not realtime i.e the set can change and this wont be reflected in an ongoing iteration. This a drawback for the benefit of a thread safe iterator
add a comment |
You could use CopyOnWriteArraySet
For example
Set<Integer> threadSafeSet = new CopyOnWriteArraySet<>();
The above set can now be accessed from any thread without ConcurrentModificationException
s. But its not realtime i.e the set can change and this wont be reflected in an ongoing iteration. This a drawback for the benefit of a thread safe iterator
You could use CopyOnWriteArraySet
For example
Set<Integer> threadSafeSet = new CopyOnWriteArraySet<>();
The above set can now be accessed from any thread without ConcurrentModificationException
s. But its not realtime i.e the set can change and this wont be reflected in an ongoing iteration. This a drawback for the benefit of a thread safe iterator
edited Nov 21 '18 at 7:14
answered Nov 21 '18 at 6:55


RyotsuRyotsu
565313
565313
add a comment |
add a comment |
What's the point of iterating infinitely? Maybe it's enough to iterate over set when it has changed? Then you could use observer pattern.
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
add a comment |
What's the point of iterating infinitely? Maybe it's enough to iterate over set when it has changed? Then you could use observer pattern.
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
add a comment |
What's the point of iterating infinitely? Maybe it's enough to iterate over set when it has changed? Then you could use observer pattern.
What's the point of iterating infinitely? Maybe it's enough to iterate over set when it has changed? Then you could use observer pattern.
answered Nov 21 '18 at 7:27
Konstantin BerkowKonstantin Berkow
5811921
5811921
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
add a comment |
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
thousands of reason for someone iterating infinetely, you can be playing musics in a loop (While user can add or remove songs), you can repeatdly do tasks, you can even repeatdly ping a client to check if still alive... the reasons to iterate in contineously over a list are infinite
– Rafael Lima
Nov 22 '18 at 2:40
add a comment |
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%2f53406547%2fhow-to-continous-loop-collection-without-concurrentmodificationexception%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
maybe a docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
– Scary Wombat
Nov 21 '18 at 6:57