線程池配置
@Configuration
public class ExecutorConfig {
private static int CORE_POOL_SIZE =10;
private static int MAX_POOL_SIZE =32;
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor poolTaskExecutor =new ThreadPoolTaskExecutor();
//線程池維護線程的最少數量
poolTaskExecutor.setCorePoolSize(CORE_POOL_SIZE);
//線程池維護線程的最大數量
poolTaskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
//線程池所使用的緩沖隊列
poolTaskExecutor.setQueueCapacity(1800);
//線程池維護線程所允許的空閑時間
poolTaskExecutor.setKeepAliveSeconds(300);
poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return poolTaskExecutor;
}
}
服務類配置
@Slf4j
@Service
public class ExecutorService {
@Autowired
private ThreadPoolTaskExecutorexecutor;
public void forTest() {
List list = Collections.synchronizedList(new ArrayList<>());
for (int i =1; i <=3000; i++) {
list.add(i);
}
executor.execute(() -> {
for(int i :list){
System.out.println(i);
}
});
}
}
測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExecutorServiceTest {
@Autowired
private ExecutorServiceexecutorServiceTest;
@Test
public void forTest()throws Exception {
executorServiceTest.forTest();
}
}
輸出結果會少數據草描。求解答