Подробно объяснить, как влияет ключевое слово volatile в коде
500 руб.за час
Подробно объяснить через дискорд или zoom про volatile, как влияет ключевое слово volatile у поля utteranceCount в данном коде.
Почему без volatile программа не выводит данные (или выводит очень долго?!) Почему при дебагинге даже без volatile все работает и выводится.
public class Solution {
public static int totalSpeechCount = 200;
public static int utterancesPerSpeech = 1000000;
public static int ext = 0;
public static void main(String[] args) throws InterruptedException {
Politician ivanov = new Politician("Иванов");
Politician petrov = new Politician("Петров");
Politician sidorov = new Politician("Сидоров");
while (ivanov.getSpeechCount() + petrov.getSpeechCount() + sidorov.getSpeechCount() < 200) {
}
System.out.println(ivanov);
System.out.println(petrov);
System.out.println(sidorov);
}
public static class Politician extends Thread {
public volatile int utteranceCount;
public Politician(String name) {
super(name);
start();
}
public void run() {
while (utteranceCount < totalSpeechCount * utterancesPerSpeech) {
utteranceCount++;
}
}
public int getSpeechCount() {
return utteranceCount / utterancesPerSpeech;
}
@Override
public String toString() {
return String.<em>format</em>("%s сказал речь %d раз", getName(), getSpeechCount());
}
}
}
Почему без volatile программа не выводит данные (или выводит очень долго?!) Почему при дебагинге даже без volatile все работает и выводится.
public class Solution {
public static int totalSpeechCount = 200;
public static int utterancesPerSpeech = 1000000;
public static int ext = 0;
public static void main(String[] args) throws InterruptedException {
Politician ivanov = new Politician("Иванов");
Politician petrov = new Politician("Петров");
Politician sidorov = new Politician("Сидоров");
while (ivanov.getSpeechCount() + petrov.getSpeechCount() + sidorov.getSpeechCount() < 200) {
}
System.out.println(ivanov);
System.out.println(petrov);
System.out.println(sidorov);
}
public static class Politician extends Thread {
public volatile int utteranceCount;
public Politician(String name) {
super(name);
start();
}
public void run() {
while (utteranceCount < totalSpeechCount * utterancesPerSpeech) {
utteranceCount++;
}
}
public int getSpeechCount() {
return utteranceCount / utterancesPerSpeech;
}
@Override
public String toString() {
return String.<em>format</em>("%s сказал речь %d раз", getName(), getSpeechCount());
}
}
}
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.