Hi Gus (long time no hear by the way)
There is no one correct way of making a pl/sql process multi-threaded - it realy depends upon what the process does, and how it is executed.
I've recently completed work on making some big concurrent batch processing jobs multi-threaded by using Advanced Queueing (DBMS_AQ), which provides an easy way into threading.
The main 'parent' process creates the queue and places the work onto this queue. Child processes are spawned and passed the ID of the queue. These child processes simply loop through fetching the next message off the queue and performing the processing. If the queue is empty then the child process completes.
There is a wealth of information on DBMS_AQ available either from OTN or other 3rd party sites (a quick google reveals many).
Also Steven Feuerstein's book on Oracle in-built packages has a large section on using DBMS_AQ that provides a worked example.
I cannot provide you with any code samples as i do not own the IPR on them.
If you have specific questions on queueing later on then do please ask - i can provide assistance.