多线程有返回值

import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class MultiFutureThread {
    
    public static void main(String[] args) {
        
        int sizeNum = 5;
        // 创建一个线程池
        ExecutorService pool = Executors.newFixedThreadPool(sizeNum);
        
        ArrayList<Future<String>> results = new ArrayList<Future<String>>();
        try {
            for (int i = 0 ;i < sizeNum; i++) {
                
                CallThread t = new CallThread(i);
                // 执行任务并获取Future对象
                Future f = pool.submit(t);
                results.add(f);
                
                //如果这里加上返回的值,在线程变为一个个开启,可能会卡,还会出现下一个线程会等到上一个线程开启完再执行
                //System.out.println("各个线程的值:" + f.get().toString());
            }
        
            pool.shutdown();
        
            // 获取所有并发任务的运行结果
            for (Future f : results) {
                
                // 从Future对象上获取任务的返回值,并输出到控制台
                System.out.println("关闭线程池后,各个线程的值:" + f.get().toString());
            }    
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}



import java.util.concurrent.Callable;

/**
 * 开启线程,返回值
 */
public class CallThread implements Callable<Object>{
    
    private int numberThread;
    
    public CallThread(int numberThread) {
        
        this.numberThread = numberThread;
    }
    @Override
    public Object call() throws Exception {
        
        System.out.println("线程 : " + numberThread + "开启");
        
        return numberThread;
    }
}


1.输出结果 (在开启线程时候获取返回值)

线程 : 0开启
各个线程的值:0
线程 : 1开启
各个线程的值:1
线程 : 2开启
各个线程的值:2
线程 : 3开启
各个线程的值:3
线程 : 4开启
各个线程的值:4
关闭线程池后,各个线程的值:0
关闭线程池后,各个线程的值:1
关闭线程池后,各个线程的值:2
关闭线程池后,各个线程的值:3
关闭线程池后,各个线程的值:4


2.输出结果 (最后才获取线程值)

线程 : 0开启
线程 : 1开启
关闭线程池后,各个线程的值:0
关闭线程池后,各个线程的值:1
线程 : 2开启
关闭线程池后,各个线程的值:2
线程 : 3开启
关闭线程池后,各个线程的值:3
线程 : 4开启
关闭线程池后,各个线程的值:4






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值