Blocking logically assigns the value immediately. If you use a blocking assignment to assign "A" and then use A on the next line it will have the new value. If you had used the non-blocking assignment A would have it's old value until the next clock cycle (assuming it's synchronous logic).
Using non-blocking assignments is safer in some respects because it often better represents how the hardware actually works. Using blocking assignments is fine if you understand what it's doing and how it's going to synthesize.