BLOCK经常出现mixin的Groovy多线程功能

时间:2016-04-05 06:54:28

标签: java multithreading groovy mixins

当我使用多线程情况下的groovy mixin函数时,大多数使用mixin线程出现块。

  • Groovy版本2.4.6
  • Java版1.7

重现问题的一个小例子:

class ClassMixinTest {

public static void main(String[] args) {


    ExecutorService service = Executors.newFixedThreadPool(100)

    while (true) {
        service.submit(new Runnable() {
            @Override
            void run() {
                invoke()
            }
        })

        service.submit()

    }
}

static void invoke() {
    ClassMixinTest.User user = new ClassMixinTest.User()

    long start = System.nanoTime()

    user.metaClass.mixin(ClassMixinTest.Man)

    println("spend" + (System.nanoTime() - start))

}


static class User {
}

static class Man {
}

}

运行exmple ClassMixinTest并使用jstack线程堆栈进行分析,然后我们发现在mixin的实现中发生了大量的阻塞。

  • 详细的线程堆栈
    enter image description here

BLOCK发现发生在同一个地方:org.codehaus.groovy.vmplugin.v7.IndyInterface

  • 这种方法
    enter image description here

当我在多个线程中使用mixin时,有没有人知道这个地方为什么要同步或者如何避免阻塞。

0 个答案:

没有答案