Только что протестил один пример, указанный ниже:
public void run() {
long current = 1L;
long max = 20000L;
long numPrimes = 0L;
System.out.printf("Thread '%s': START\n", Thread.currentThread().getName());
for(; current <= max; ++current) {
if (this.isPrime(current)) {
++numPrimes;
}
}
System.out.printf("Thread '%s': END. Number of Primes: %d\n", Thread.currentThread().getName(), numPrimes);
}
private boolean isPrime(long number) {
if (number == 111) {
System.out.println("ИМЯ " + Thread.currentThread().getName() + " " + number);
}
if (number <= 2L) {
return true;
} else {
for(long i = 2L; i < number; ++i) {
if (number % i == 0L) {
return false;
}
}
return true;
}
}
Выполняя заметил, что каждый поток, выполняет участок указанный ниже. То есть получается что каждый поток имеет свою переменную current и каждый из потоков инкрементировал ее. То есть она ThreadSafe. Это для меня стало неожиданностью.
if (number == 111) {
System.out.println("ИМЯ " + Thread.currentThread().getName() + " " + number);
}
И собственно вопросы. Это достигается с помощью this.isPrime(current)
? Можно ли утверждать что каждый поток как бы создает собственную current и вызов через this.метод, заставляет все потоки выполнять вычисления, как бы "не пересекаясь"?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня не запускается сервера крмпЧто делать? В ютубе все видео посмотрел нечего не помогает
Пишу программу, которая весь на весь экран рисует сетку квадратовВ каждом квадрате нарисована цифра "0"
Изучают javaСама программа думаю будет простая, единственному юзеру