Functional tests are defined by the customer. They are a kind of restatement of the user stories in very formal terms. They provide certain stimuli to the system, and expect certain outputs. I'd be looking closely at them and augmenting them to make sure they cover as many boundary conditions as feasible.
Unit tests can test multi-threaded stuff.
A single unit test can create multiple tasks and provide the stimuli that make them interact. Programmers will want to create unit tests that stress the interactions between tasks. Still, it's difficult to find the nasty reentrancy problems that way. Sometimes the best approach is just a monte-carlo test with random timings. Object Mentor Inc.