Are Kotlin's immutable collections thread-safe?

It is just encapsulated and made threadsafe by preventing modification it.

It also needs to be published in a safe way, that's why they use a final field for it: https://github.com/google/guava/blob/master/guava/src/com/google/common/collect/RegularImmutableList.java#L35 :)

I'm not quite sure what you mean by "published". The final keyword does not make the array itself immutable, only the reference to it. This means "final" prevents that array being replaced by another array. The elements in the array can still be changed.

I'm not quite sure what you mean by "published".

http://lmgtfy.com/?q=java+safe+publication

The final keyword does not make the array itself immutable, only the reference to it. This means "final" prevents that array being replaced by another array. The elements in the array can still be changed.

Actually it's a bit more complex than that, so you might want to spend some time reading this (specifically 17.5.1 as I sugested above to someone else): https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5