1314. Что делает ключевое слово volatile?
Ключевое слово volatile в Java используется для гарантии, что значения полей объектов будут согласованы между потоками и не будут кэшироваться в рантайме. Кэширование может привести к непредсказуемым результатам при доступе к изменяемым полям из разных потоков исполнения.
Когда поле объявлено как volatile, Java гарантирует, что доступ к этому полю со стороны разных потоков будет согласован и последовательным. Это обеспечивает правильную синхронизацию между потоками, когда один поток записывает в это поле, а другой поток его читает.
Например:
public class MyRunnable implements Runnable {
private volatile boolean running;
public void run() {
while (running) {
// делаем что-то здесь }
}
public void stop() {
running = false;
}
}
Здесь мы объявляем поле running как volatile, чтобы гарантировать, что его значение будет согласовано между потоками. Мы используем это поле для остановки выполнения потока в методе run(), проверяя его значение на каждой итерации цикла. Метод stop() устанавливает значение running в false, чтобы остановить цикл while в методе run().
Важно отметить, что использование ключевого слова volatile не гарантирует атомарности операций чтения и записи. Для решения этой проблемы можно использовать блокировки.
Если вам понравилось, буду признателен за подписку.