Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

ForkJoinPool/多线程任务调度处理: 并行任务,串行任务分发

Notifications You must be signed in to change notification settings

yifocus/processor

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

processor

使用ForkJoin 实现多线程任务调度处理

我们通常会遇见这种情况需要 并行 串行任务按顺序处理

###如图执行顺序如下

  • 任务一 任务二 异步执行
  • 执行任务三
  • 执行任务四
  • 任务五,任务六,任务七异步执行

###IProcessor 任务需实现的接口

 /**
     * 任务id
     * @return
     */
    public String id();

    /**
     * 是否是异步
     * @return true 异步,false 同步
     */
    public boolean isAsyn();

    /**
     * 任务逻辑处理
     * @return
     */
    public Object process();

###ProcessorExecuteService 逻辑服务

···

/**
 * 任务执行: 此方法完成之后,所有任务都已经调用完成
 * @return
 */
public void execute(){
    ForkJoinPool pool = new ForkJoinPool();
    pool.invoke(new ProcessorAction(chain));
}

/**
 * 异步执行任务
 */
public Future executeAsync(){
    ForkJoinPool pool = new ForkJoinPool();
    future = pool.submit(new ProcessorAction(chain));
    return future;
}

···

###使用多线程调度测试



        Test t = new Test();
        List<IProcessor> list = new CopyOnWriteArrayList<>();
        list.add(new Process1("任务一",true));
        list.add(new Process1("任务二",true));
        list.add(new Process1("任务三",false));
        list.add(new Process1("任务四",false));
        list.add(new Process1("任务五",true));
        list.add(new Process1("任务六",true));
        list.add(new Process1("任务七",true));


        long start = System.currentTimeMillis();
        ProcessorExecuteService processorPool = new ProcessorExecuteService(list);
        processorPool.executeAsync();

        System.out.println("end execute: " + (System.currentTimeMillis() - start));

        System.out.println(processorPool.getProcessorResult("任务一"));
        System.out.println(processorPool.getProcessorResult("任务二"));
        System.out.println(processorPool.getProcessorResult("任务三"));
        System.out.println(processorPool.getProcessorResult("任务四"));
        System.out.println(processorPool.getProcessorResult("任务五"));
        System.out.println(processorPool.getProcessorResult("任务六"));
        System.out.println(processorPool.getProcessorResult("任务七"));

        System.out.println("end get : " + (System.currentTimeMillis() - start));

About

ForkJoinPool/多线程任务调度处理: 并行任务,串行任务分发

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.