多线程

作者: 斜月86 | 来源:发表于2022-07-06 10:08 被阅读0次
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;

/**
 * @Description
 * @Date 2022-07-06 9:23 AM
 */
public class FeedProcessor extends AbstractFeedProcessor {

    private ExecutorService threadPool = Executors.newFixedThreadPool(6);

    private Map<Integer, List<Integer>> resultList = new ConcurrentHashMap<>();

    public FeedProcessor() {

    }


    public void add(DataItem item) {
        threadPool.submit(new ProcessTask(item));
    }

    class ProcessTask implements Runnable {

        private DataItem item;

        ProcessTask(DataItem item) {
            this.item = item;
        }

        @Override
        public void run() {
            for(;;){
                int id = item.getId();
                List<Integer> list = resultList.get(id);
                // 如果版本号为 1 则可以继续执行
                if(list == null && item.getVersion() == 1){
                    saveItem(item);
                    list = new ArrayList<>();
                    list.add(item.getVersion());
                    resultList.put(id, list);
                    break;
                } else {
                    // 最后一个版本号 + 1 等于自己的版本号,则轮到该任务执行
                    if(list != null && list.get(list.size() -1) + 1 == item.getVersion() ){
                        saveItem(item);
                        list.add(item.getVersion());
                        resultList.put(id, list);
                        break;
                    } else {
                        try {
                            TimeUnit.MILLISECONDS.sleep(20);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }


                }
            }


        }
    }

    public void shutdown() {
        threadPool.shutdown();
        try {
            threadPool.awaitTermination(60, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

      本文链接:https://www.haomeiwen.com/subject/pvzebrtx.html