Groovy GPAR中的NullPointerException,Actor
Groovy:1.8.6 GPAR:0.12或1.2.1 操作系统:Ubuntu 14.04 LTSGroovy GPAR中的NullPointerException,Actor,groovy,parallel-processing,gpars,actor-model,Groovy,Parallel Processing,Gpars,Actor Model,Groovy:1.8.6 GPAR:0.12或1.2.1 操作系统:Ubuntu 14.04 LTS @Grab(group='org.codehaus.gpars', module='gpars', version='0.12') import groovyx.gpars.actor.Actor import groovyx.gpars.actor.Actors def a = 1 def b = 100000 def reactor2 = Actors.reactor {
@Grab(group='org.codehaus.gpars', module='gpars', version='0.12')
import groovyx.gpars.actor.Actor
import groovyx.gpars.actor.Actors
def a = 1
def b = 100000
def reactor2 = Actors.reactor {
println " $it"
}
def reactor1 = Actors.reactor {
println "$it"
reactor2 << it
}
Actor actor = Actors.actor {
(a..b).each {reactor1 << it}
}
actor.join()
reactor1.stop()
reactor1.join()
reactor2.stop()
reactor2.join()
@Grab(group='org.codehaus.gpars',module='gpars',version='0.12')
导入groovyx.gpars.actor.actor
导入groovyx.gpars.actor.Actors
def a=1
def b=100000
def reactor2=Actors.reactor{
println“$it”
}
def reactor 1=Actors.reactor{
println“$it”
reactor2从您提供的代码示例中,我不能100%确定您试图实现的目标。似乎您正在尝试为提供的范围内的每个值指定一个参与者,并通过打印提供的值对消息作出反应
鉴于此,您的代码存在一些问题。主要问题是缺少循环{}
闭包,这确保Actor
在处理一条传入消息后等待下一条传入消息
其次,调用stop()
也没有帮助。它只是阻止Actor
接收其他消息。在您的情况下,这不会造成任何伤害,因为您立即调用join,但会增加混乱
要使其正常工作,以下是您的代码简化为工作示例:
import groovyx.gpars.actor.Actors
def a = 1
def b = 100000
def actor = Actors.actor {
loop {
react {
println it
}
}
}
(a..b).each {
actor << it
}
actor.join()
你能在你的问题中加入例外吗?另外,你能使用比3年前更新的groovy版本吗?
def a = 1
def b = 100000
def reactor2 = Actors.reactor { message ->
if(!message.equals("done")) {
println "\t\tReact Again: $message"
}
return "done"
}
def reactor = Actors.reactor { message ->
if(!message.equals("done")) {
println "\tReact: $message"
reactor2 << message
}
return "done"
}
def actor = Actors.actor {
loop {
react {
if(!it.equals("done")) {
println it
reactor << it
}
}
}
}
(a..b).each {
actor << it
// actor.oi
}
actor.join()