groovy:多线程 简单示例

发布于:2025-02-11 ⋅ 阅读:(56) ⋅ 点赞:(0)

在Groovy中,多线程编程与Java非常相似,因为Groovy运行在Java虚拟机(JVM)上,并且可以利用Java的所有并发工具。以下是一些在Groovy中实现多线程编程的方法:
 

class MyThread extends Thread {
    @Override
    void run() {
        println("Thread running: " + Thread.currentThread().name)
    }
}
 
def thread1 = new MyThread()
thread1.start()
 
def thread2 = new Thread({
    println("Lambda thread running: " + Thread.currentThread().name)
})
thread2.start()

2. 使用 Runnable 接口
你也可以实现 Runnable 接口并将其传递给 Thread 对象。

def runnable = new Runnable() {
    @Override
    void run() {
        println("Runnable thread running: " + Thread.currentThread().name)
    }
}
 
def thread = new Thread(runnable)
thread.start()

或者,使用更简洁的Lambda表达式:

groovy
def thread = new Thread({
    println("Lambda Runnable thread running: " + Thread.currentThread().name)
})
thread.start()

3. 使用 ExecutorService
ExecutorService 提供了一种更高级的方法来管理线程池。

import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
 
def executorService = Executors.newFixedThreadPool(2)
 
executorService.submit({
    println("Executor thread running: " + Thread.currentThread().name)
})
 
executorService.submit({
    println("Another executor thread running: " + Thread.currentThread().name)
})
 
// 关闭ExecutorService
executorService.shutdown()

4. 使用 Groovy 的 @Parallel 注解(GPars)
Groovy的GPars库提供了一种更简洁的并行编程方式。要使用GPars,你需要在项目中添加GPars依赖。

在 build.gradle 中添加依赖:

groovy
dependencies {
    implementation 'org.codehaus.gpars:gpars:1.2.1'
}

然后,你可以使用 @Parallel 注解或GPars的其他功能:

import groovyx.gpars.GParsPool
 
def task = {
    println("GPars thread running: " + Thread.currentThread().name)
}
 
GParsPool.withPool(2) {
    task.callAsync()
    task.callAsync()
}
 
// 或者使用 @Parallel 注解(需要在方法上使用)
@groovyx.gpars.GParsConfiguration(poolSize = 2)
class ParallelTasks {
    @groovyx.gpars.Parallel
    def runTask() {
        println("Annotated GPars thread running: " + Thread.currentThread().name)
    }
}
 
def parallelTasks = new ParallelTasks()
parallelTasks.runTask().get() // 注意:这里使用了get()来等待结果,如果不需要等待,可以省略
parallelTasks.runTask().get()

注意事项
线程安全:确保你的代码在多线程环境下是线程安全的。
资源管理:合理管理线程的生命周期和资源使用,避免资源泄露。
异常处理:在多线程代码中,确保妥善处理异常,否则可能导致线程意外终止。
通过上述方法,你可以在Groovy中实现灵活的多线程编程。
 


网站公告

今日签到

点亮在社区的每一天
去签到