我想出了一些有趣的代码
public class FeedService {
@Inject
private FriendService friendService;
@Inject
private FeedRepository feedRepository;
private ThreadPoolTaskExecutor taskExecutor;
public FeedService(){
prepareExecutor();
}
@Async
public void addToFriendsFeed(final Status status, User user) {
Collection<String> friends = friendService.getFriendsForUser(user.getLogin());
for (final String friend : friends) {
taskExecutor.execute( new Runnable() {
public void run() {
feedRepository.createFeed(friend, Constants.FEED_STATUS, status.getStatusId());
}
});
}
}
public Executor prepareExecutor() {
taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(2);
taskExecutor.setMaxPoolSize(10);
taskExecutor.setQueueCapacity(25);
taskExecutor.setThreadNamePrefix("FeedServiceExecutor-");
taskExecutor.initialize();
return taskExecutor;
}
}
我不确定这段代码是否正确。任何一位春天大师都可以让我知道...... 我无法理解执行程序部分。我不确定是否需要在每次执行新Runnable时创建ThreadPool ...我不是线程专家,这就是我发布的原因..如果我已经知道了比我还没发布它......
答案 0 :(得分:0)
您的TaskExecutor
将null
,因为您尚未对其进行初始化。
您的prepareExecutor()
方法会创建一个ThreadPoolTaskExecutor
,它会分配给局部变量,然后返回。您对该返回值不执行任何操作。您的意思是将其分配给taskExecutor
吗?
您可能希望注入TaskExecutor
而不是在此服务中创建它。