В Java ключевое слово volatile
используется, чтобы пометить переменную как изменчивую, что означает, что она может быть изменена одновременно несколькими потоками.
Вот пример использования ключевого слова volatile
в Java:
public class VolatileExample { private volatile int counter = 0; public void incrementCounter() { counter++; } public int getCounter() { return counter; } }
В приведенном выше примере переменная counter
помечена как volatile
, что означает, что любые ее обновления будут немедленно видны всем потокам. Это полезно в многопоточной среде, где несколько потоков могут читать и записывать одну и ту же переменную.
Вот пример того, как несколько потоков могут одновременно обновлять переменную volatile
:
public class VolatileExample { private volatile int counter = 0; public void incrementCounter() { counter++; } public int getCounter() { return counter; } public static void main(String[] args) { final VolatileExample example = new VolatileExample(); // Create two threads that increment the counter Thread thread1 = new Thread(new Runnable() { public void run() { for (int i = 0; i < 1000; i++) { example.incrementCounter(); } } }); Thread thread2 = new Thread(new Runnable() { public void run() { for (int i = 0; i < 1000; i++) { example.incrementCounter(); } } }); // Start the threads thread1.start(); thread2.start(); // Wait for the threads to finish try { thread1.join(); thread2.join(); } catch (InterruptedException e) { // Handle exception } // Print the final value of the counter System.out.println(example.getCounter()); } }
В приведенном выше примере создаются два потока, которые одновременно увеличивают переменную counter
в 1000 раз каждый. Без ключевого слова volatile
возможно, что окончательное значение переменной counter
будет меньше 2000, поскольку обновления, сделанные одним потоком, могут быть невидимы другому потоку. Однако, поскольку переменная counter
помечена как volatile
, обновления, сделанные одним потоком, немедленно видны другому потоку, а окончательное значение переменной counter
гарантированно равно 2000.