关于Java多线程处理

jopen 10年前

主要是介绍一下Java的Callable的多线程问题

   import java.util.concurrent.*;  import java.util.Date;  import java.util.List;  import java.util.ArrayList;  /**   * * Java线程:有返回值的线程    * @author wb_qiuquan.ying   */    public class Test {   @SuppressWarnings("rawtypes")   public static void main(String[] args) throws ExecutionException,     InterruptedException {    int sizeNum = 5;    // 创建一个线程池    ExecutorService pool = Executors.newFixedThreadPool(sizeNum);    // 创建多个有返回值的任务    List<Future> list = new ArrayList<Future>();    for (int i = 0; i < sizeNum; i++) {  //   Callable c = new MyCallable(i + " ");也可以这样写,运行结果一样     MyCallable c = new MyCallable(i + " ");          // 执行任务并获取Future对象     Future f = pool.submit(c);     System.out.println("线程运行中此线程的值是:" + f.get().toString());     list.add(f);    }    // 关闭线程池   pool.shutdown();    // 获取所有并发任务的运行结果    System.out.println("");    for (Future f : list) {     // 从Future对象上获取任务的返回值,并输出到控制台     System.out.println("关闭线程池后,各个线程的值:"+ f.get().toString());    }        System.exit(0);   }  }  class MyCallable implements Callable<Object> {   private String taskNum;   MyCallable(String taskNum) {    this.taskNum = taskNum;   }      //call()方法   public Object call() throws Exception {    System.out.println(">>>" + taskNum + "call()方法任务启动");    Date dateTmp1 = new Date();    Thread.sleep(1000);    Date dateTmp2 = new Date();    long time = dateTmp2.getTime() - dateTmp1.getTime();    System.out.println(">>>" + taskNum + "任务终止");    return "线程"+taskNum + "返回运行的时间【" + time + "毫秒】";   }  }