Sure, a single thread can use as many Isolates as it wants. Most V8 API functions take an Isolate or a Context (which implies an Isolate) parameter to facilitate this.
Things to keep in mind:
- creating an Isolate is somewhat expensive, so creating millions of short-lived Isolates is not great for performance. (Having dozens or even hundreds of long-lived Isolates is perfectly fine.)
- objects (including functions, contexts, ...) are tied to the Isolate they were created in. They can't be moved to, or executed in, or accessed from another Isolate.