Groovy 多线程
Java 支持多线程。定义了 Runnable 接口,并在根类 Object 中提供了 wait/notify 方法,还有 synchronized 关键字的支持。我们常说实现多线程的方式有两种:继承 Thread类 和实现 Runnable接口,实质上工作者线程执行的都是 Runnable 接口中定义的 run() 方法,Thread 本身实现了 Runnable 接口,它不过是为线程的调度使用提供了许多有用的方法而已。
Groovy 在多线程方面自然也不会甘拜下风。Groovy 通过 MetaClass 对java.lang.Thread 进行了扩展,即所谓的 GDK - Groovy methods added to Java SE classes。
在原 java.lang.Thread 类中增加了两个方法,分别是:
static Thread start(Closure closure); static Thread startDaemon(Closure closure); //对应的是 Daemon 线程
这两个方法接受的参数是闭包,要知道所有的闭包都是继承自 groovy.lang.Closure,而它是实现了java.lang.Thread 的。所以使用闭包很容易实现 Groovy 中的多线程。
具体到代码上就有以下几种写法:
t = new Thread() {/* Closure body */}; t.start(); Thread.start { /* Closure body */}; Thread.startDaemon { /* Closure body */};
这样,闭包中的代码就会在一个新的线程中执行。真的是这样吗?最能加深印象的做法是我们用一段代码来测试一下,可以从两方面来观察,满足一项即可:
1. 闭包外部和内总分别打印出当前的线程名看是否不一样,是则为不同线程
2. 看闭包中的操作是否要阻塞主线程,不会则表示在新线程中执行的闭包
println "Outter thread: " + Thread.currentThread().getName() Thread.start { println "Inner thread: "+Thread.currentThread().getName() "How are you?".each { print it } } println "Fine, thank you."
执行后的输出都是:
Outter thread: main
Fine, thank you.
Inner thread: Thread-1
How are you?
线程名不一样,并且最后一行代码有机会在闭包执行之前或之中执行,从这两者中任一条件说明了闭包是在新线程中执行的。试着以通常的方式调用闭包,就是不一样的情况了。
Java 中可以使用 Timer 和 TimerTask 来实现定时任务--在新线程中执行。Groovy 对此 java.util.Timer 也有相应的扩展,增加了 runafter(int delay,Closure closure) 方法。因此在 Groovy 中应用 Timer 也能实现多线程:
new Timer().runAfter(1000) { /* Closure body */}
其他与线程相关 wait/notify 和 synchronized 控制,在使用上与 Java 差不多的。
相关推荐
Groovy的协程和Python的多线程/多进程模型也各有优劣,但在处理高并发场景时可能不如前两者高效。 总的来说,Scala、Erlang、Groovy和Python各自在特定领域有其独特的优势。选择哪种语言取决于具体的应用场景、团队...
6. Groovy的使用场景:书中详细介绍了Groovy在多个领域的应用,包括并行和函数式编程、对象迭代方法、集合和映射增强、多线程和进程控制、文件和I/O流处理、数据库操作(SQL和NoSQL)等。 7. Web开发、测试、GUI...
8. **GPars**:Groovy的并行处理库,用于编写多线程和并发代码,充分利用多核处理器的优势。 9. **构建工具**:Groovy常被用于构建工具如Gradle,它允许使用Groovy脚本替代传统的XML配置,提高了构建脚本的可读性...
10. **GPars并行处理**:Groovy提供了GPars库,用于在多核处理器上实现并发和并行处理,简化了多线程编程。 在"groovy-1.8.9"这个压缩包中,通常会包含以下内容: - Groovy解释器和编译器:用于运行和编译Groovy...
6. **GPars并行处理**:Groovy 3提供了GPars库,用于并发和并行处理,它简化了多线程编程,使得开发者可以利用多核处理器的性能优势。 7. **领域特定语言(DSL)**:Groovy的简洁语法使得它非常适合创建领域特定...
首先,Groovy 2.3系列带来了对Java 7的全面支持,这允许开发者利用Java的新特性,如try-with-resources语句和多线程fork/join框架。同时,它也保持了与Java 6的兼容性,使得在旧环境下仍能顺畅运行。 Groovy的动态...
书中会讨论如何在Groovy中处理多线程和异步操作。 9. **实战案例**:书中可能包含实际项目中的应用示例,如Web服务客户端、数据处理脚本、测试框架的编写等,帮助读者将理论知识应用于实际开发中。 10. **最佳实践...
文档会介绍如何有效地利用这些工具来提升多线程应用的性能。 Groovy的语法简洁且富有表达力,例如,它支持链式方法调用、列表和映射的简写形式以及三元操作符。这些特性使得Groovy代码看起来更加整洁。文档会通过...
Apache是开源软件项目的重要基石,很多Java和Groovy项目都会依赖Apache的相关组件,如Apache Commons库,它们提供了丰富的工具类和算法,对于并发编程也有着辅助作用,例如Apache Commons Lang的线程工具类,可以...
- Groovy 2 引入了新的并发原语,如 `@Grabbed` 注解,用于处理多线程环境下的资源锁定问题。 - 支持使用 `grizzly` 和 `Akka` 库来实现更高效的并发编程模型。 4. **增强的语法糖**: - 提供了更多的语法糖,如...
此外,Groovy还提供了许多库,如GPars(Groovy Parallel Systems),用于并发和多线程编程,这在处理复杂的文本界面程序时可能会派上用场。 在"完成文本界面的程序框架"这部分,你可能已经学习了如何组织代码,使其...
通过使用选择器,我们可以实现单线程管理多个通道,提高系统资源利用率。 4. **多路复用器(Selector)和选择键(SelectionKey)**:多路复用器是Java NIO的核心组件,它允许程序同时监视多个通道,而选择键表示...
此外,《Groovy in Action》也涵盖了Groovy对多线程和并发的支持,以及如何利用Groovy的天鹅绒测试(Geb)库进行Web自动化测试。书中还包含了一些实战项目,让读者能够亲手实践,加深对Groovy的理解。 总之,...
### Groovy实例代码详解 #### 一、字符串处理 ...以上知识点仅为Groovy语言功能的一小部分,Groovy还提供了更多高级特性,如闭包、元编程、类型推断等,使得它成为Java生态系统中一个强大且灵活的开发工具。
### 多线程在Groovy中的运用 在Groovy中,线程的创建与启动非常直观,可以通过构造`Thread`对象并传入一个闭包(Closure)来实现。闭包作为线程体,在线程启动时执行。例如: ```groovy t = new Thread() { /* ...
该源码是一个Groovy多功能开源类库案例,源码SwissKnife,SwissKnife是开源的Groovy多功能开源类库,使用注释为Android实现包括视图注入和线程的功能。它基于ButterKnife和AndroidAnnotations。 SwissKnife 使用...
Stackless Python通过减少每个线程的堆栈大小来实现这一点,从而允许更多的线程同时运行。这在处理大量并发任务时特别有用,例如在网络服务器和实时系统中。 Erlang是一种为构建大规模并发系统而设计的函数式编程...