A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 WakeUp 于 2014-11-5 20:08 编辑

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

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

1 个回复

倒序浏览
一样是启动线程 但是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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马