Java-线程过多的多线程问题

Java-线程过多的多线程问题,java,multithreading,Java,Multithreading,提供实时股票数据的第三方API正在为每个股票的每次价格更新创建一个新线程(代码部分如下) 这会每天产生250000多个线程(在4-5小时内),即使对于像我这样的新手来说,这看起来也是一个糟糕的设计。我的程序在大约2小时后开始抛出NullPointerException,尽管价格正在更新。我怀疑问题是由于生成了大量线程 我需要监控的Scrip总数约为120,因此我正在寻找一种最多120个线程的方法,其中每个价格更新都会写入特定的线程 我指的是提供的解决方案(生产者/消费者模式),我认为该解决方案应

提供实时股票数据的第三方API正在为每个股票的每次价格更新创建一个新线程(代码部分如下)

这会每天产生250000多个线程(在4-5小时内),即使对于像我这样的新手来说,这看起来也是一个糟糕的设计。我的程序在大约2小时后开始抛出NullPointerException,尽管价格正在更新。我怀疑问题是由于生成了大量线程

我需要监控的Scrip总数约为120,因此我正在寻找一种最多120个线程的方法,其中每个价格更新都会写入特定的线程


我指的是提供的解决方案(生产者/消费者模式),我认为该解决方案应该满足这一需求。请求指导我如何将其翻译成代码,因为我是新手。或者,如果有任何其他方法可以用最少的线程数来实现这一点,我们会很高兴。

NullPointerException不是太多线程的直接结果,其他一些东西会中断并导致它们(可能与内存有关)

您可以在某处创建托管线程池

private static final ExecutorService executorService = Executors.newCachedThreadPool();
并让它决定(重新)使用哪些线程,而不是创建自己的线程:

byte[] data = new byte[byteLength];
System.arraycopy(byteArray.toByteArray(), index, data, 0, data.length);
executorService.execute(new BrokerAPI.parseData(data))

如果您可以编辑源代码,那么可以将新的线程构造替换为所需大小的线程池的委托。此API受CPU限制,因此您创建的线程数不应超过内核数。您是否有权限和能力编辑此第三方API?如果不行,那就无能为力了。如果可以的话,我建议您阅读有关
Executors
ExecutorService
的内容,谢谢。我将按照您的建议进行更改,并在明天的实时数据流会话期间进行测试。这无疑有助于减少创建的线程数。但在对TableView进行排序时,我仍然会得到一个NullPointerException,我将把它作为一个单独的问题来问。谢谢
byte[] data = new byte[byteLength];
System.arraycopy(byteArray.toByteArray(), index, data, 0, data.length);
executorService.execute(new BrokerAPI.parseData(data))