Yes and yes.
SELECT * FROM my_table FOR UPDATE;
will throw a lock on each row it selects.
However, Oracle's mantra is "Readers don't block writers, and writers don't block readers". Another select statement can run since it looks but doesn't actually touch anything.