I’m wondering if there could be any problems while accessing one array with multiple threads but either only reading or only writing.
When the threads write to the array it wouldn’t matter in which order they write and even if they write to the same entry all threads would write the same value.
For example, if I want to find prime numbers via the Sieve of Eratosthenes:
I create an array of consecutive numbers and set all multiples of prime numbers to 0 using multiple threads.
It wouldn’t matter if the thread which strikes off the multiples of two and the thread which strikes off the multiples of 5 set the entry of the number 20 to 0 at the same time or one before or after the other.
So it’s not an question of the qualitiy or consistency of the data, but of the technical possibility to do it wihout facing any java errors.
I’m assuming you mean ‘without synchronization controls’. The short answer is no.
Synchronization is used for 2 reasons:
Your setup indicates that the first reason isn’t really a problem in your case. The algorithm effectively separates the data out so that multiple worker threads won’t be using the same data.
However, in order for changes done in one thread to become visible to another thread, you must use synchronization. Without synchronization, the JVM makes no guarantee as to the ordering of writes. Updates that one thread makes may be visible in another thread at any time later, or even never. See Effective Java Item #66, and maybe look at the Java Concurrency in Practice book.