A mutable state, to put it simply, is data that can be changed. For example, at one point in time, you may read some variable, x, and find that it points to some data. At another time, you may read a different value from the same variable. The value is different because the variable is mutable and another part of the program mutated it.
Let's look at why exactly the mutable state is not desirable. Imagine you have an online game. It relies on multiple threads, and the concurrency architecture of choice is the actors model. You have an actor that is supposed to track the users currently present in the game. Tracking can be implemented as a mutable collection inside the actor. Users log in and out of the game by sending messages to this actor. So, every time a message for logging in arrives at the actor, the user is added to the list of logged-in users. When...