Java呼叫Groovy 簡單例子
阿新 • • 發佈:2018-12-31
------------------------------ 簡單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(); } }