Как говорит Брайан, многопоточность и параллелизм - огромная область, и ее легче понять неправильно, чем правильно ...
Чтобы ваш код работал, вам нужно что-то вроде этого:
abstract class Actor implements Runnable {
synchronized void proceed() { notify() }
synchronized void pause() { wait() }
}
class MyActor extends Actor {
void run() {
println "hi"
pause()
println "hi again"
}
}
def theactor = new MyActor() // Create an instance of MyActor
def actorThread = new Thread( theactor ) // Create a Thread to run this instance in
actorThread.start() // Thread.start() will call MyActor.run()
Thread.sleep( 500 ) // Make the main thread go to sleep for some time so we know the actor class is waiting
theactor.proceed() // Then call proceed on the actor
actorThread.join() // Wait for the thread containing theactor to terminate
Однако, если вы используете Groovy, я бы серьезно подумал об использовании фреймворка, подобного Gpars , который обеспечивает параллелизм в Groovy и написан людьми, которые действительно знают свое дело. Однако я не могу придумать ничего такого, что может привести к такому произвольному приостановлению кода ... Может быть, вы могли бы разработать свой код так, чтобы он соответствовал одному из их шаблонов использования?