We need to associate information with a thread, but we cannot just use the thread local storage. Thread local storage suffers from 2 problems:
1) It is accessible only from that thread. In the case of tasks, we need to support task families and the ability to cancel another task. Since another thread will be doing this cancelling, and it relies on setting state on another thread, this thread storage should be accessible in a protected way from other threads
2) When we leave a JVM for a remote JVM, this thread information should come across with it. This is difficult to do with thread local information.