자바 멀 티 태 스 크 병행 처리 -- Callable

2677 단어 병발 하 다자바
제 업무 에서 다 중 스 레 드 를 사용 하 는 목적 은 1. 효율 이 크게 향상 되 고 2. 메모리 가 효과적으로 제어 할 수 있 으 며 3. 코드 의 차원 감 이 뚜렷 합 니 다.
    
현재 로 서 는 내 가 주로 아 는 것 은 다음 과 같은 두 가지 이다.
1. callable 스 레 드 를 실현 하고 ExecutorService executor = Executors. new Fixed ThreadPool (5) 을 사용 합 니 다.스 레 드 탱크 병행 실행,
구체 적 인 demo 는 다음 과 같 습 니 다.
package com.ziglar.call;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

public class Main
{

    public static void main(String[] args)
    {

        //                   ,String          (      )    
        List params = new ArrayList();
        params.add("first");
        params.add("Second");
        params.add("Third");
        params.add("Forth");

        //   ,       ,     Executors.newCachedThreadPool()              

        ExecutorService executor = Executors.newFixedThreadPool(5);

        //         
        List> list = new ArrayList>();
        for (String param : params)
        {
            list.add(new Job(param));
        }
        try
        {
            //       
            List> futures = executor.invokeAll(list);

            //           ,      ,        
            for (Future future : futures)
            {
                String result = future.get();
                System.out.println(result);
            }

        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        catch (ExecutionException e)
        {
            e.printStackTrace();
        }

    }
}
package com.ziglar.call;

import javax.xml.bind.SchemaOutputResolver;
import java.util.concurrent.Callable;

/**
 * Created by Administrator on 2016/6/30.
 */
public class Job implements Callable
{
    private String name;

    private String jobName;
    public Job(String name)
    {
        this.name=name;
    }

    @Override
    public String call() throws Exception
    {
        this.jobName = Thread.currentThread().getName();
        //                ,          
        return "     :" + jobName +",      :"+ name;
    }
}

이런 방식 을 제 가 사용 할 때 들 어 오 는 매개 변수 대상 의 차원 이 비교적 많 기 때문에 3 층 병발 포 함 됩 니 다. 하위 job 에서 부모 스 레 드 와 유사 한 방식 을 다시 사용 하고 여러 번 병발 합 니 다.
병발 하 는 연못 은 모두 5 인 데 주로 실제 매개 변수 집합 이 분 해 된 후에 도 5 개 정도 인 것 을 고려 하여 실제 운행 매개 변수 수량 이 많 고 영향 이 크 지 않다.
2. RecursiveTask 의 스 레 드 를 계승 하고 ForkJoinPool forkJoinPool = new ForkJoinPool () 을 사용 합 니 다.이런 것 은 집합 을 세분 화하 여 병발 할 수 있다.
(보충 필요)

좋은 웹페이지 즐겨찾기