黑马程序员技术交流社区

标题: Callable创建线程和Runnble创建线程有什么区别? [打印本页]

作者: WakeUp    时间: 2014-11-3 23:27
标题: Callable创建线程和Runnble创建线程有什么区别?
本帖最后由 WakeUp 于 2014-11-5 20:08 编辑

如题,Callable创建线程和Runnble创建线程有什么区别?

作者: 郑飞    时间: 2014-11-4 06:23
一样是启动线程 但是Callable要通过FutureTask包装后 用FutureTask对象作为构造参数创建线程
Callable中的call()方法代替了Runnable中的run()方法,可以有返回值,可以带异常
返回值是通过FutureTask的get()方法拿到的
  1. import java.io.IOException;
  2. import java.util.Random;
  3. import java.util.concurrent.Callable;
  4. import java.util.concurrent.ExecutionException;
  5. import java.util.concurrent.FutureTask;

  6. public class Test {
  7.         public static void main(String[] args) throws IOException, InterruptedException, ExecutionException
  8.         {
  9.                 final int[] arr = new int[10];
  10.                 Callable<int[]> cl = new Callable<int[]>(){
  11.                         public int[] call()
  12.                         {
  13.                                 for(int i = 0;i<10;i++)
  14.                                 {
  15.                                         arr[i] = new Random().nextInt(100);
  16.                                         System.out.println("添加第"+i+"個元素!");
  17.                                 }
  18.                                 return arr;
  19.                         }
  20.                 };
  21.                 FutureTask<int[]> task = new FutureTask<int[]>(cl);
  22.                 new Thread(task){}.start();
  23.                 for(int i : task.get())
  24.                         System.out.print(i+" ");
  25.         }     
  26. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2