1. 程式人生 > >Java呼叫Groovy 簡單例子

Java呼叫Groovy 簡單例子

------------------------------ 簡單demo  ---------------------------------------

-- 

package b.groovy;

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyCodeSource;
import groovy.lang.GroovyObject;

import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestGroovy002 {

    public static void main(String[] args) throws Exception {
        long start = System.currentTimeMillis();


        ScriptEngineManager manager = new ScriptEngineManager();

        ScriptEngine engine = manager.getEngineByName("groovy");
        Bindings bindings =     engine.createBindings();

        for (int i = 0; i < 100000; i++) {
            Map<String, Object> map = new HashMap<>();
//            map.put("name","tom"+i);
            bindings.put("map",map);
            Object eval2 = engine.eval(" map.remove('a');  map['name']='55'; return map;", bindings);
            System.out.println(eval2);
        }
        System.out.println(System.currentTimeMillis()-start);

    }
}


------------------------------ 多執行緒 執行groovy ---------------------------------------

package c.groovy;

import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.HashMap;
import java.util.Map;

public class GroovyUtils {

    ScriptEngineManager manager = new ScriptEngineManager();

    public ScriptEngine getScriptEngine(){
        ScriptEngine engine = manager.getEngineByName("groovy");
        return  engine;
    }


    public void execute(ScriptEngine engine,String tname) throws ScriptException {
        Bindings bindings = engine.createBindings();
        Map<String, Object> map = new HashMap<>();
        map.put("name",tname);
        bindings.put("map", map);
        Object e = engine.eval(" map.remove('a');  map['name']='"+tname+"'; return map;", bindings);
        System.out.println(e);

        assert ("{name="+tname+"}").equals(e.toString());
    }

}
package c.groovy;

import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class ThreadTestGroovy {


    public static void testXC(){

        GroovyUtils g = new GroovyUtils();
        ScriptEngine scriptEngine1 = g.getScriptEngine();

        for (int i = 0; i < 1000; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                         g.execute(scriptEngine1,Thread.currentThread().getName());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }, "T"+i).start();
        }

    }

    public static void main(String[] args) {
        testXC();
    }

}