2012-04-13 8 views
1

。私たちはアプリケーションでいくつかの負荷テストを行っていました。最初のテストを使用するときには、この呼び出しでいくつかのスレッドが待機していることに気付きました。しかし、第2のケースではすべてが円滑に機能します。Groovyの各メソッド/クロージャー

私はここで違いが何かを知りたいです。

答えて

4

何も同じものです。 Groovyでは関数の最後のパラメータが閉鎖された場合、それは例えば、中括弧の外側、ので、発生する可能性があります。

[1,2,3].inject(0) { acc, it -> acc + it } 

[1,2,3].inject(0, { acc, it-> acc + it }) 

は同じものです。 Groovyを書く一般的な方法は、あなたの例の中括弧を外したり、上の例のinjectの例の中かっこの外側にクロージャを置くことです。

+0

Ok。しかし、この呼び出しはスレッドをブロックすることが知られていますか? –

+1

@DhanushGopinathどちらも同じです。 _ "ブロックスレッド" _の意味を説明できますか?多分あなたの質問にそれを追加しますか? –

+0

ティムの答えは正しいです。 Groovyで2つのGroovyスクリプト(括弧なしのスクリプト)をコンパイルすると、両方のクラスファイルが生成されます。生成されたバイトコードを表示するために 'javap -c'でそれらを実行すると、(スクリプト名といくつかのタイムスタンプ以外の)2つの間に違いはないことがわかります。彼らはまったく同じコードパスを通過します。 OPは、ロードテストの実行にいくつかの違いがあったに違いありません。 –