ExecutorService executor = Executors.newFixedThreadPool(2); String finalSourceName = sourceName; executor.execute(() -> { catalogService.syncMetadataByTable(finalSourceName, importTask.getSchemaName(), tableName, false); }); executor.execute(() -> { catalogService.syncMetadataByTable(finalSourceName, importTask.getSchemaName(), tableName.toUpperCase(Locale.ROOT), false); }); executor.shutdown();帮我优化如下代码,让我可以重用已经创建的线程,而不是在每个同步周期中都要再次创建他们,请给出优化后的代码?
时间: 2023-06-04 10:06:17 浏览: 95
Executor,Executors,ExecutorService比较.docx
可以将线程池的创建放到一个静态变量中,然后每次需要执行任务时,通过线程池的execute方法将任务提交到线程池中执行。优化后的代码如下:
```
public class CatalogSyncScheduler {
private static final ExecutorService executor = Executors.newFixedThreadPool(2);
public void syncMetadataByTable(String sourceName, String schemaName, String tableName) {
String finalSourceName = sourceName;
executor.execute(() -> {
catalogService.syncMetadataByTable(finalSourceName, schemaName, tableName, false);
});
executor.execute(() -> {
catalogService.syncMetadataByTable(finalSourceName, schemaName, tableName.toUpperCase(Locale.ROOT), false);
});
}
}
```
在这个例子中,我们将线程池的创建放到了CatalogSyncScheduler类中,并将线程池声明为静态变量。每次调用syncMetadataByTable方法时,将任务通过executor.execute方法提交到线程池中执行。由于线程池是静态的,因此可以在多个实例之间共享,避免了在每个同步周期中都要再次创建线程池的问题。
阅读全文