有返回值的多线程demo

package com.jimmy.demo.util;

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

/** * 有返回值的线程 */@SuppressWarnings("unchecked")public class Test {    public static void main(String[] args) throws ExecutionException,            InterruptedException {        System.out.println("----程序开始运行----");        Date date1 = new Date();

        int taskSize = 1;        // 创建一个线程池        ExecutorService pool = Executors.newFixedThreadPool(1);        // 创建多个有返回值的任务        List<Future> list = new ArrayList<Future>();        for (int i = 0; i < taskSize; i++) {            Callable c = new MyCallable(i + " ");            // 执行任务并获取Future对象            Future f = pool.submit(c);            System.out.println(">>>" + f.get().toString());            list.add(f);        }        // 关闭线程池        pool.shutdown();

        // 获取所有并发任务的运行结果        for (Future f : list) {            // 从Future对象上获取任务的返回值,并输出到控制台            System.out.println(">>>" + f.get().toString());        }

        Date date2 = new Date();        System.out.println("----程序结束运行----,程序运行时间【"                + (date2.getTime() - date1.getTime()) + "毫秒】");    }}

class MyCallable implements Callable<Object> {    private String taskNum;

    MyCallable(String taskNum) {        this.taskNum = taskNum;    }

    public Object call() throws Exception {        System.out.println(">>>" + taskNum + "任务启动");        Date dateTmp1 = new Date();//   Thread.sleep(1000);        Date dateTmp2 = new Date();        long time = dateTmp2.getTime() - dateTmp1.getTime();        System.out.println(">>>" + taskNum + "任务终止");        return taskNum + "=====" + Thread.currentThread().getName() + "任务返回运行结果,当前任务时间【" + time + "毫秒】";    }

}

----程序开始运行----
>>>0 任务启动
>>>0 任务终止
>>>0 =====pool-1-thread-1任务返回运行结果,当前任务时间【0毫秒】
>>>0 =====pool-1-thread-1任务返回运行结果,当前任务时间【0毫秒】
----程序结束运行----,程序运行时间【8毫秒】

时间: 2024-10-18 15:57:40

有返回值的多线程demo的相关文章

带返回值的多线程

参考地址:http://blog.51cto.com/lavasoft/222082 为了提高执行效率,有时可以采用多线程执行 1.每个线程执行的方法一样 import java.util.concurrent.*; /** * Java线程:有返回值的线程 * * @author Administrator 2009-11-5 0:41:50 */ public class Test { public static void main(String[] args) throws Executi

Callable--创建有返回值的线程

转自:JAVA 笔记 Callable 与 FutureTask:有返回值的多线程 常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存.Callable接口则提供了一种有返回值的多线程实现方法.下面以一个简单的地主.监工和长工的例子展示这种接口的用法. 长工类: 长工类实现了Callable接口,线程运行完成后返回一个Integer值. package com.lk.C; import java.util.concurrent.Cal

2.Perl 多线程:Threads(线程返回值)

1 use warnings; 2 use strict; 3 use threads; 4 5 sub TEST{ 6 print "Hello, World!\n"; 7 return (qw/1 2 3 4 'a'/); 8 } 9 10 #返回列表方法1 11 my ($t1) = threads->new('TEST'); 12 print $t1->join, "\n"; 13 14 #返回列表方法2 15 # 16 my $t2 = thr

java多线程之从任务中获取返回值

package wzh.test; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; class TaskWithResult implements Callable<Strin

python获取多线程的返回值

最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 import threading class MyThread(threading.Thread): def __init__(self,func,args=()): super(MyThread,self).__init__() self.func = func self.args = args def run(self): self.result = self.func(

测试 多线程 实现 callable 带返回值

1 package threadTest; 2 3 import java.util.ArrayList; 4 import java.util.Date; 5 import java.util.concurrent.Callable; 6 import java.util.concurrent.ExecutionException; 7 import java.util.concurrent.ExecutorService; 8 import java.util.concurrent.Exec

Thead线程篇之-----多线程 实现 有返回值的功能

import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class MyCallBack implements Callable<String>{ private String threadName; public MyCallBack() { } public MyCallBack(S

C# 多线程编程,传参,接受返回值

今天将多线程的知识有回顾了下,总结了几点: 新建一个线程(无参数,无返回值) Thread th = new Thread(new ThreadStart(PrintName)); public  void PrintName()    // 函数 { //函数体 } 这里一定注意ThreadStart中的函数是没有返回值和参数的 那么有参数时,就该如下: Thread th = new Thread(new ParameterizedThreadStart(PrintName)); publi

【黑马Android】(07)多线程下载的原理/开源项目xutils/显示意图/隐式意图/人品计算器/开启activity获取返回值

多线程下载的原理 司马光砸缸,多开几个小水管,抢救小朋友. import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import