重构多线程异步应用程序以防止过多线程

时间:2014-09-02 11:00:45

标签: java multithreading asynchronous refactoring

我正在尝试重构多线程异步应用程序。每次应用程序启动特定事件(它们是从外部设备生成)时,我都会有一个类,它会启动一个新线程并注册该事件。之后在另一个类中,我启动一个处理事件的新线程,然后关闭两个线程。 我想重构这个因为如果引发100个不同的事件,我将有100个不同的线程(并且应用程序将在嵌入式PC中运行,如raspberry pi或marsboard)。 所以我找到了两种尝试解决问题的方法:

  • 使用线程池,但它有一个限制所以我将丢失事件thar在池线程达到限制后引发
  • 使用队列:我将在同步和单线程中转换应用程序,但最多我只有一个线程在运行。

还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

结合两种解决方案。

使用线程池,如果没有空闲线程,则开始排队请求。

这就是应用服务器解决此问题的方式。

答案 1 :(得分:1)

使用无限数量的线程确实是一个糟糕的主意, 您可以改用ThreadPoolExecutorBlockingQueueThreadPoolExecutor有一个构造函数,它带有BlockingQueue

由于您提到了重构,请尝试从线程使用的代码中删除可变性。 尝试使所有类型疯狂不可变,如果不可能隐藏可变性。这将为免费提供线程安全