Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


Add the following line to the groovy script:

Code Block

@Grab(group='org.codehaus.gpars', module='gpars', version='0.12')


Believe it or not, now, we're ready to experiment. Try the following script, which will concurrently query a collection of strings with regular expressions:

Code Block

@Grab(group='org.codehaus.gpars', module='gpars', version='0.12')
import groovyx.gpars.GParsPool

GParsPool.withPool {
    def animals = ['dog', 'ant', 'cat', 'whale']
    println(animals.anyParallel {it ==~ /ant/} ? 'Found an ant' : 'No ants found')
    println(animals.everyParallel {it.contains('a')} ? 'All animals contain a' : 'Some animals can live without an a')

Run the script and you should get the following output:

Code Block

Found an ant
Some animals can live without an a


To find out more about parallel collection processing, visit the Parallel Colections section of the User Guide.

Step 4 - Actors

Now we could try to build an actor and send it a couple of messages to see it acting.

Code Block

@Grab(group='org.codehaus.gpars', module='gpars', version='0.12')
import org.codehaus.groovy.runtime.NullObject

final class MyActor extends DynamicDispatchActor {
    private int counter = 0

    void onMessage(String message) {
        counter += message.size()
        println 'Received string'

    void onMessage(Integer message) {
        counter += message
        println 'Received integer'

    void onMessage(Object message) {
        counter += 1
        println 'Received object'

    void onMessage(NullObject message) {
        println 'Received a null object. Sending back the current counter value.'
        reply counter

final def actor = new MyActor()
actor.send 1
actor << 2
actor 20
actor 'Hello'
println actor.sendAndWait(null)