我有一个应用程序接收来自其他应用程序的警报,通常每分钟一次,但我需要能够处理更高的每分钟音量。我正在使用的接口和一般的Alert框架要求可以异步处理警报,并且如果异步处理警报则可以停止警报。 stop方法具体记录为停止线程。我编写了下面的代码来创建一个AlertRunner线程,然后停止该线程。但是,这是处理终止线程的正确方法吗?并且此代码是否能够轻松扩展(不是一个荒谬的卷,但可能同时警告第二个或多个警报)?
<div>
<img align="left" src="img link" style="float: left; width: 28%; margin-right: 8%; margin-bottom: .5em;" width="28">
<img src="img link" style="float: middle; width: 28%; margin-right: 5%; margin-bottom: .5em;" width="28">
<img align="right" src="img link" style="float: right; width: 28%; margin-right: 0%; margin-bottom: .5em;" width="28">
</div>
答案 0 :(得分:2)
此代码无法轻松扩展,因为Thread
是非常“重”的对象。创建起来很昂贵,启动起来很昂贵。使用ExecutorService
完成任务要好得多。它将包含有限数量的线程,可以处理您的请求:
int threadPoolSize = 5;
ExecutorService executor = Executors.newFixedThreadPool(threadPoolSize);
public void receive(Alert a) {
assert a != null;
executor.submit(() -> {
// Do your work here
});
}
此处executor.submit()
将在单独的线程中处理您的请求。如果现在所有线程都忙,请求将在队列中等待,从而防止资源耗尽。它还返回一个Future
实例,您可以使用该实例等待处理完成,设置超时,接收结果,取消执行以及许多其他有用的东西。