Diy*_*kir 2 java multithreading
我有一个 JAX-RS/Jersey Rest API,它获取请求并需要在单独的线程中执行额外的工作,但我不确定是否建议使用线程池。我预计会有很多对该 API 的请求(每天几千个),但我在后台只有一项额外的工作。
每次都像这样创建一个新线程会不会很糟糕?任何意见,将不胜感激。我以前没有使用过ThreadPool。
@Get
@Path("/myAPI")
public Response myCall() {
// call load in the background
load();
...
// do main job here
mainJob();
...
}
private void load() {
new Thread(new Runnable() {
@Override
public void run() {
doSomethingInTheBackground();
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)
编辑: 只是为了澄清。我只需要一个额外的作业在后台运行。该作业将调用另一个 API 来记录一些信息,仅此而已。但它必须对每个请求执行此操作,并且我不需要等待响应。这就是为什么我想在新的后台线程中执行此操作。
Edit2: 这就是我现在想到的。谁能告诉我这是否可行(它在本地工作)以及我是否需要关闭执行程序(请参阅代码中的评论)?
// Configuration class
@Bean (name = "executorService")
public ExecutorService executorService() {
return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
}
// Some other class
@Qualifier("executorService")
@Autowired
private ExecutorService executorService;
....
private void load() {
executorService.submit(new Runnable() {
@Override
public void run() {
doSomethingInTheBackground();
}
});
// If I enable this I will get a RejectedExecutionException
// for a next request.
// executorService.shutdown();
}
Run Code Online (Sandbox Code Playgroud)