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

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

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

【问题讨论】:

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

标签: java multithreading


【解决方案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,但仍然没有进展
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2019-03-15
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
相关资源
最近更新 更多