多线程主线程接受返回结果

来源:互联网 发布:淘宝版本过低怎么升级 编辑:程序博客网 时间:2024/05/21 10:26

当多线程需要接受子线程执行结果,根据执行结果触发不同的动作时,原来的extend Thread或者是implement Runable已经不能满足,JDK并发包部分为我们提供了线程池,使用线程池可以返回子线程执行结果

demo代码如下:

 public class ThreadPoolTest implements Callable<String> {public static void main(String[] args) {ThreadPoolTest client = new ThreadPoolTest();client.fun();}@Overridepublic String call() throws Exception {System.out.println("执行此段代码");return "返回数据";}public void fun(){ExecutorService executor = Executors.newFixedThreadPool(3);Future<String> future = null;//int processor = Runtime.getRuntime().availableProcessors();  System.out.println("JVM可用处理器数:" + processor);for(int i = 0 ; i < 4; i++){future = executor.submit(new ThreadPoolTest());//If you would like to immediately block waiting for a task, //you can use constructions of the form result = exec.submit(aCallable).get(); //如果你想立刻阻塞等待任务,你可以这样使用:exec.submit(aCallable).get();try{System.out.println("返回结果是:" + future.get());     } catch (Exception e){e.printStackTrace();executor.shutdown();}}executor.shutdown();       }}
构建线程池参数说明:

corePoolSize:线程池中至少存活的线程数,即使存活的线程是空闲的
maximumPoolSize:线程池中允许存活的最大线程数
keepAliveTime:当线程池中存在空闲线程时,空闲线程存活时间(超过这个时间就要回收掉)
unit:keepAliveTime单位
workQueue:存放任务的队列
threadFactory:executor创建线程的工厂
handler:执行阻塞时的handler(默认使用AbortPolicy)
public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {}


0 0
原创粉丝点击