There is an example of using threads with Groovy in Venkat’s book.
He uses the GDK extension to Thread and calls Thread.start. I wondered if the main thread would wait until the started thread completed, and what would happen if you started another thread.
I made some changes, and ran it.
Here is my class:
package info.shelfunit.venkat.ch07 class BetterThreadExample { def printThreadInfo( msg ) { println "$msg" } def doStuff() { sleep( 5000 ) printThreadInfo 'Main' println "Main is ${Thread.currentThread().name}" Thread.start { def name = Thread.currentThread().name printThreadInfo "AA Started: ${name}" sleep( 3000 ) println "AA Interrupted 1" sleep( 1000 ) println "AA IN started" sleep( 3000 ) println "AA still in started" println "AA Finished Started" } Thread.start( 'Second' ) { def name = Thread.currentThread().name printThreadInfo "BB Started Daemon: ${name}" sleep( 5000 ) println "BB Interrupted 2" sleep( 1000 ) println "BB in second thread" sleep( 1000 ) println "BB Finished Started Daemon" } println "At the end in main" } static void main( String[] args ) { def bte = new BetterThreadExample() bte.doStuff() } // end method main }
Here is the result:
Main Main is main At the end in main AA Started: Thread-1 BB Started Daemon: Second AA Interrupted 1 AA IN started BB Interrupted 2 BB in second thread BB Finished Started Daemon AA still in started AA Finished Started
So the main thread gets to its last statement pretty quickly. The two threads run simultaneously. I already knew this, but it’s good to review threads every now and then.
I was always intimidated by threading and concurrent programming. Maybe it’s not too bad in Groovy.
You’re welcome.
Image from Aurora Consurgens, a 15th century manuscript housed at Central Library of Zurich. Image from e-Codices. This image is assumed to be allowed under Fair Use.