Java 在grails中创建并发线程/承诺
我的grails应用程序中有一个操作,我希望在调用该操作时启动一个异步方法。我尝试使用承诺来实现这一点,但似乎task1是系统同步运行的。有人知道我如何使task1异步(并发)运行,并在action collector的同时进行处理吗Java 在grails中创建并发线程/承诺,java,multithreading,groovy,promise,task,Java,Multithreading,Groovy,Promise,Task,我的grails应用程序中有一个操作,我希望在调用该操作时启动一个异步方法。我尝试使用承诺来实现这一点,但似乎task1是系统同步运行的。有人知道我如何使task1异步(并发)运行,并在action collector的同时进行处理吗 def collector(){ try{ Promise task1 = task { println "task1 - starting" console() //call anoth
def collector(){
try{
Promise task1 = task {
println "task1 - starting"
console() //call another method
println "task1 - ending"
}
//do something
...
}catch(){
....
}
异步运行代码片段的三种方法 A。使用线程
def mytask={println "3.hello"}
println "1.begin"
new Thread( {
mytask();
}).start()
println "2.end"
输出:
1.开始
二,完
你好
B。使用事件
import grails.events.Events
@Consumer
class Game implements Events{
@Selector("play")
def doPlay(Object msg) {
println msg.toString()
}
}
def gameScenarioService
//send event, will call doPlay method asyncrhonously
notify ( "play", "First Play" )
C。使用
输出:
开始
结束
信息
使用Grails3:
import grails.async.Promise
import static grails.async.Promises.task
Promise p = task {
// do stuff
}
p.onError { Exception err ->
log.error( "Error during task $err" )
}
p.onComplete {
log.info "Task completed"
}
当我调用新线程({mytask();})时,start()第一个mytask()将被完全处理,并且只有在处理父线程之后才能继续。我希望(线程的调用方方法和线程)同时运行。它们是并行的,但要看到效果,您必须执行一个耗时的任务,尝试for循环10000次,您将看到
import grails.async.Promise
import static grails.async.Promises.task
Promise p = task {
// do stuff
}
p.onError { Exception err ->
log.error( "Error during task $err" )
}
p.onComplete {
log.info "Task completed"
}