From ConcurrentHashMap source code we can see that it uses a subclass of ReentrantLock
static final class Segment<K,V> extends ReentrantLock
...
Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
this.loadFactor = lf;
this.threshold = threshold;
this.table = tab;
}
...
As we can see its only constructor implicitly calls ReentrantLock's no-args constructor which creates a non-fair lock. It means ConcurrentHashMap's locks are always non-fair