如何限制Java程序中的多线程?

Posted

技术标签:

【中文标题】如何限制Java程序中的多线程?【英文标题】:How to restrict the multithreading in a Java program? 【发布时间】:2019-06-07 06:50:45 【问题描述】:

我正在创建一个在线判断,为此我希望提交的java代码不应该使用CPU的并行处理。所以,我希望禁用 Java 应用程序的多线程。

发送到服务器的应用程序只是一个java文件,它会被编译成字节码然后执行,假设应用程序正在使用线程,它正在创建一个线程,应用程序应该通过抛出一些异常来关闭像 Permission Denied 一样的错误。

【问题讨论】:

不使用线程? Thread creation listener的可能重复 我不会使用,一些正在使用我的在线判断的用户可以,他可能会发送包含线程的代码,所以我想通过抛出一些异常或引入一些错误来拒绝他的代码 您必须使用安全管理器:***.com/a/31039987/2588800 @Tibrogargan 它涉及代码,我将通过java <class name with main method>, 简单地执行代码,所以我不会添加包装器 【参考方案1】:

使用线程池代替线程。创建具有所需并行度的线程池,例如 1:

ExecutorService threadPool = Executors.newFixedThreadPool(1);

用提交任务到线程池代替线程创建:

Runnable r = ...
Thread t = new Thread(r);
t.start();
...
t.join();

替换为

Runnable r = ...
Future<Void> future = executorService.submit(r);
...
future.get();

通过这种方式,您可以创建任意数量的并行任务。

【讨论】:

这个答案对 OP 没有帮助,因为 OP 不是可能创建线程的代码的作者。 OP 想要创建一个系统来判断代码(例如,想想“编码竞赛”。)竞赛规则说“单线程”,并且 OP 想要一种自动化的方式来拒绝那些不正确的条目不要遵守这条规则。 是的,这不是我想要的,我只想将多线程强制为 1。我试图使用 apparmor,但仍然没有进展

以上是关于如何限制Java程序中的多线程?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的多线程概念

说说java中的多线程

编程思想之多线程与多进程——Java中的多线程

java中的多线程

java中的多线程

Java中的多线程