Groovy: Multi threaded producer consumer program

import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue BlockingQueue queue = new LinkedBlockingQueue(); Thread.start('Producer') { 10.times { println(Thread.currentThread().name + " adding $it") queue << it sleep(100) } } Thread.start('Consumer') { for(i in 0..9){ sleep(200) print(Thread.currentThread().name) println("consuming ${queue.take()}") } }

Groovy: Closure Composition

Closure composition corresponds to the concept of function composition, that is to say creating a new function by composing two or more functions (chaining calls), as illustrated in this example:

def plus2 = { it + 2 } def times3 = { it * 3 } def times3plus2 = plus2 << times3 assert times3plus2(3) == 11 assert times3plus2(4) == plus2(times3(4)) def plus2times3 = times3 << plus2 assert plus2times3(3) == 15 assert plus2times3(5) == times3(plus2(5)) // reverse composition assert times3plus2(3) == (times3 >> plus2)(3)