This happens only if your job is implemented as a class with static Execute method and you start it manually. If a job is started by the scheduler it will use a separate thread. If job is implemented as a class inherited from EPiServer.BaseLibrary.Scheduling.JobBase it will always use a separate thread for manual or scheduled start.
I have a job that may potentially be running for a long time. To simulate that, for now I put Thread.Sleep(100000); in code of my EPiServer job. When I start the job manually the whole user session freezes. Is this a bug or a feature? Can it be changed/worked around?