当前位置: 首页 > 面试题库 >

Java中要运行多少个线程?

吴康平
2023-03-14
问题内容

我有一个绝妙的主意,可以加快生成36个文件所需的时间:使用36个线程!不幸的是,如果我j2ssh使用36个线程/会话启动一个连接(一个连接对象),那么与每次执行每个线程相比,所有事情的滞后性更大。
现在,如果我尝试创建36个新连接(36个j2ssh连接对象),则每个线程都有一个单独的服务器连接,要么我退出内存异常(以某种方式程序仍然运行,并成功结束工作,但速度比我慢依次执行一个线程)。

那么该怎么办?如何找到我应该使用的最佳线程号?因为Thread.activeCount()在开始我的36线程之前是3?我正在使用联想笔记本电脑英特尔酷睿i5。


问题答案:

您可以使用来将其范围缩小到更合理的线程数ExecutorService。您可能想要使用接近可用处理器核心数量的一些东西,例如:

int threads = Runtime.getRuntime().availableProcessors();
ExecutorService service = Executors.newFixedThreadPool(threads);
for (int i = 0; i < 36; i++) {
    service.execute(new Runnable() {
        public void run() {
            // do what you need per file here
        }
    });
}
service.shutdown();


 类似资料:
  • 问题内容: 我正在运行Eclipse 3.5,并且经常遇到一个问题,为了测试程序,我必须单击6-7次,而不是单击“播放”按钮。 问题是我正在编写网络应用程序,因此我具有“服务器”的运行配置和“客户端”的运行配置。然后要测试我的程序,我必须先启动服务器,再启动一个客户端,然后再启动另一个客户端,等等。是否有将其自动化为一个运行配置的方法? 问题答案: 您可以直接调用任何类的main方法。例如,如果您

  • 问题内容: 因此,我的目标是让函数启动自己的线程,以便可以并行运行,而不必等待上一个线程完成。问题在于,它似乎不是多线程的(意味着一个线程在另一个线程开始之前就完成了)。 我也有该函数的内部,但似乎启动的线程的标识与从其运行python脚本的主线程相同。我认为我的方法不正确。 问题答案: 这是常见错误,容易出错。 只需在主线程中一次执行您的函数,然后将(我想为您函数的返回值)作为函数传递给线程,这

  • 问题内容: Java VM可以支持多少个线程?这会因供应商而异吗?通过操作系统?其他因素? 问题答案: 这取决于您正在使用的CPU,操作系统,其他正在执行的操作,您正在使用的Java版本以及其他因素。我已经看到Windows服务器在关闭计算机之前具有> 6500个线程。当然,大多数线程没有做任何事情。一旦计算机遇到了大约6500个线程(使用Java),整个计算机就会开始出现问题并变得不稳定。 我的

  • 这里我用java开发。 我有一个for循环中的线程,我想连续运行5次。不幸的是,循环在第二次运行时停止,出现了一个错误: 异常在线程"main"java.lang.IllegalThreadStateExctive在java.base/java.lang.Thread.start(Thread.java:793) 我知道这个错误是什么意思,但是我要求他在确定完成线程时恢复循环,这样就不会有任何错误

  • 问题内容: 今天在面试中,我被要求编写代码来确定在Java运行时类的多少实例退出。 我告诉他们,我们可以利用反思。请告诉我您是否有有效的方法。 问题答案: 我认为反思不会帮助您。有JVMTI(以及较早且现在已不存在的JVMPI)可用于分析堆并确定类的当前实例数。 一种编码的替代方法是向您要跟踪以下实例的类添加一个计数器: 这将跟踪曾经创建的实例数量,并且是线程安全的。要了解何时对实例进行垃圾回收,

  • -第一种方法 所有的查询都可以存储在一个配置单元表中,我可以编写一个Spark驱动程序来一次读取所有查询,并使用java多线程并行运行所有查询(与HiveContext一起 优点:易于维护 缺点:可能会占用所有资源,并且对每个查询进行性能优化可能会很困难。 使用oozie spark操作单独运行每个查询 优点:可以在查询级别进行优化 缺点:难以维护。 我找不到任何关于第一种方法的文档,说明Spar