Java调用Groovy 简单例子

这篇博客介绍了如何在Java应用中调用Groovy脚本进行编程,首先展示了一个简单的调用Groovy的demo,接着详细探讨了在多线程环境中如何运行Groovy脚本,为Java开发者提供了一种灵活的扩展方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

------------------------------ 简单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();
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值