В чём заключаются различия между java.util.concurrent.Atomic*.compareAndSwap() и java.util.concurrent.Atomic*.weakCompareAndSwap().

853
  • weakCompareAndSwap() не создает memory barrier и не дает гарантии happens-before;
  • weakCompareAndSwap() сильно зависит от кэша/CPU, и может возвращать false без видимых причин;
  • weakCompareAndSwap(), более легкая, но поддерживаемая далеко не всеми архитектурами и не всегда эффективная операция.