Java中实现线程的第三种方式

实现线程的第三种方式:

   实现Callable接口。(JDK新特性)

   这种方式的优点:可以获取到线程的执行结果

   这种方式的缺点:效率比较低,在获取t线程执行结果的时候,当前线程受阻塞,效率较低

这种方式实现的线程可以获取线程的返回值。之前讲解的那两种方式是无法获取线程返回值的,因为run方法返回void.

  思考:

   系统委派一个线程去执行一个任务,该线程执行完任务之后,可能会有一个执行结果,我们怎么能拿到这个执行结果呢?

   使用第三种方式:实现Callable接口方式。

 import java.util.concurrent.Callable;

 import java.util.concurrent.FutureTask;  //JUC包下的,属于java的并发包,老JDK中没有这个包。新特性。

 

 public class ThreadTest15{

   public static void main(String[] args){

     //第一步:创建一个”未来任务类“对象

     //参数非常重要,需要给一个Callable接口实现类对象

    FutureTask task = new FutureTask((new Callable(){

       public Object call() throws Exception{ //call方法就相当于run方法,只不过这个有返回值

           //线程执行一个任务,执行之后可能会有一个执行结果

          //模拟执行

          System.out.println("call method begin");

          Thread.sleep(1000*10);

          System.out.println("call method end!");

          int a=100;

          int b=200;

          return a+b;  //自动装箱(300结果变成Integer)

       }

    });

      //创建线程对象

      Thread t = new Thread(task);

     //启动线程

      t.start();

    //这里是main方法,这是在主线程中。

   //在主线程中,怎么获取t线程的返回结果?

  //get()方法的执行会导致”当前线程阻塞“

  Object obj = task.get();

  System.out.println("线程执行结果:"+obj);

  //main方法这里的程序要想执行必须等待get()方法的结束

 //而get()方法可能需要很久,因为get()方法是为了拿另一个线程的执行结果

 //而另一个线程执行是需要时间的。

 System.out.println("hello world");

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值