首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何杀死运行任意客户端代码的线程

如何杀死运行任意客户端代码的线程
EN

Stack Overflow用户
提问于 2019-10-11 21:02:03
回答 1查看 67关注 0票数 1

出于学术目的(阅读:大学课程),我正在构建一个加载并执行学生提交的代码的应用程序。

每个学生都提交一个.class文件,该文件通过反射加载、实例化,然后在自己的线程中执行。自定义安全管理器用于禁止对白名单之外的类和方法的访问。然而,仍然有可能的是学生代码中的无限循环。我希望能够超时的线程运行学生的代码,我不能依赖他们实现这个功能本身。

在java 7中,我可以使用Thread.kill(),但是这个方法从java 8开始就不再可用了。我需要一些其他方法来强制杀死运行任意未知代码(可能包含无限循环)的线程。

如果有什么诡计我不知道,请告诉我。非常感谢。

编辑:

该应用程序模拟多agent系统,学生在系统内提交代理的实现。代理之间的交互(通过访问包-超类的私有字段实现)应该是可能的,而不需要学生实现某种命令行接口。据我所知,这排除了在单独的进程而不是线程中运行学生代码的可能性。

EN

回答 1

Stack Overflow用户

发布于 2019-10-11 21:57:12

使用Future。启动您的学生代码作为未来并指定超时:

代码语言:javascript
运行
复制
myFuture.get(long timeout, TimeUnit unit);

如果超时,请捕获异常,然后取消此未来:

代码语言:javascript
运行
复制
myFuture.cancel(true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58348403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档