В 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.