What is the intuition that 2-phase locking achieves serializability (also known as before-or-after atomicity)?
I'll try to phrase it from an intuitive perspective.

Anomalies occur when there are conflicts, i.e. when two different transactions write on the same object (clearly if they only read stuff nothing can go wrong).
For example, here:

r1(x), r2(x), w1(x) // at this point, r2 read garbage


2PL is a way to prevent this kind of stuff from happening by putting a lock on every object a transaction deals with, and removing the locks when it's done. 
The lock can be a read lock (when T reads an object) or a write lock (when T writes an object) and the rules are simple:


refuse a read-lock if a write-lock (from a different T) already held
refuse a write-lock if any lock (from a different T) already held.


The idea behind these is that you don't want T2 to read something that T1 is going to overwrite (see the first example), and you don't want T2 to write onto something that was previously read or written by T1.

With 2PL, when T wants to read/write on an object it will ask permissions to put a lock on it, and this permission will be granted (or denied) based on the two rules above.

In the example I gave you, with 2PL T1 would have a write-lock on x so r2(x) would not happen before w1(x) because the read-lock would not be granted (rule 1).