It doesn't take long to do this.
Defer complexity to threads. But what if there is a lot of complex logic to process a byte just received? For example, checksum computation, address matching and etc. I suggestion is to do all that in a regular thread at top priority.
How does the ISR communicate with the handler thread? Use semaphores.