Java实现Callable接口使用多线程

实现callable的线程,使用ExecutorService executor = Executors.newFixedThreadPool(5);线程池进行并发执行

主程序如下:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
 
public class Main
{
 
    public static void main(String[] args)
    {
 
        //模拟需要并发的参数 也有可能是对象集合,String可以使用其他任意对象(包含集合对象)进行替换
        List<String> params = new ArrayList<String>();
        params.add("first");
        params.add("Second");
        params.add("Third");
        params.add("Forth");
 
        //线程池,可以为固定大小,也可以使用Executors.newCachedThreadPool()根据环境自动创建合适的大小池
 
        ExecutorService executor = Executors.newFixedThreadPool(5);
 
        //将线程加入到集合中
        List<Callable<String>> list = new ArrayList<Callable<String>>();
        for (String param : params)
        {
            list.add(new Job(param));
        }
        try
        {
            //线程池加载线程
            List<Future<String>> futures = executor.invokeAll(list);
 
            //获取每个线程返回的结果,可以进行合并,作为多并发的结果
            for (Future<String> future : futures)
            {
                String result = future.get();
                System.out.println(result);
            }
 
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        catch (ExecutionException e)
        {
            e.printStackTrace();
        }
 
    }
}

实现callable接口的类

import javax.xml.bind.SchemaOutputResolver;
import java.util.concurrent.Callable;
 
/**
 * Created by Administrator on 2016/6/30.
 */
public class Job implements Callable<String>
{
    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个左右,实际上运行参数数量多一点也影响不大。

转载自:https://blog.csdn.net/welling319/article/details/51793917

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值