Immutable 100%, but still not thread-safe

Solution 1:

Neither

final long c = current;
return new ImmutableGaugeV4(max, c + increment);

nor

g3 = g3.increase(1);

is thread-safe. These compound actions aren't atomic.

I recommend reading "Java concurrency in practice" by Brian Goetz: the chapters devoted to compound actions and "publication and escape" problems.