From what I’m reading, I assume you’re asking why some threads wait for other threads before running. If so, this is because synchronized threads will wait for parallel threads to finish executing before they will, provided they’re in the same actor.
A possible different problem could be that you’re desynchronizing in the actor, which does the opposite of desynchronizing outside the actor. Desynchronizing inside an actor synchronizes with the main thread (and vice versa), causing code to run in series instead of parallel. I may be wrong, as you’re not connecting parallel in the actor scripts.
As for your first paragraph, notice the images. Every thread looks like that, where there are two threads, one with actor 1 desync and another with actor 2 desync. Notice that despite being in different threads, one just hangs for a while until the other finishes printing, and then calls the print function.
As for the second one, that doesn’t appear to be the case after some experimentation. Sync puts them on the main thread and desync puts them on other threads, even when called inside of actors.
I’m suspecting that print statements work differently. The behaviour in question is that you must wait for the previous print to finish before the next print can run, even though it’s in a different actor/thread.
I tested this theory by adding multiple actors (more than 2), and the hypothesis was proven correct.