使用spring TaskExecutor不确定这是否正确编程

时间:2014-04-04 19:51:33

标签: spring

我想出了一些有趣的代码

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 ...我不是线程专家,这就是我发布的原因..如果我已经知道了比我还没发布它......

1 个答案:

答案 0 :(得分:0)

您的TaskExecutornull,因为您尚未对其进行初始化。

您的prepareExecutor()方法会创建一个ThreadPoolTaskExecutor,它会分配给局部变量,然后返回。您对该返回值不执行任何操作。您的意思是将其分配给taskExecutor吗?

您可能希望注入TaskExecutor而不是在此服务中创建它。