I think version 0.2 (or whatever it was called; second version of RS, rewritten from scratch to make the current version) may have done that, back before it went 3D, but since 2000 they were doing IIRC some halfway house between t-p-c and proper asynch I/O (not as fast and robust as the latter, without native support, but not creating threads as in the former). There are many people who used to do this in 1.1, but it was always IMHO and IME ugly and fragile by comparison to proper work with native memory, buffers, data triggers, etc (i.e. what NIO added support for).
Then again, RS is a very simple game, serverside, so making the execution logic fast and efficient and the data stream narrow enough was sufficient (network handling didnt need to be fast or efficient; we’re not talking an FPS here). Still, given how incredibly long it takes to debug and extend, I wouldn’t ever recommend anyone go that route now NIO is around.