Callable接口


Callable接口

特点

Callable接口

 

1.有返回

2.可以抛出异常

代码实现,Callable接口开启线程

public class CallableTest {
   public static void main(String[] args) throws ExecutionException, InterruptedException {

       MyThread thread = new MyThread();
       FutureTask futureTask = new FutureTask<>(thread);
       new Thread(futureTask).start();//这里只能接收runnable接口,所以通过中间商(FutureTask)进行转换
       String str =(String)futureTask.get(); //可能产生阻塞
       System.out.println(str);


  }
}

class MyThread implements Callable {

   @Override
   public String call() throws Exception {

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

       return "这是一个callable()接口";
  }
}

这里使用FutureTask类

  FutureTask futureTask = new FutureTask<>(thread);

由于Thread的开启使用的是runnable接口实现,所以这里不能直接调用callable接口,需要通过中间商FutureTask起到承接作用

Callable接口

 

Runnable和Callable的区别

1.实现方法不同 run( ) / call( )

2.callable有返回值,并且抛出异常

3.callable存在缓存机制,开启多个线程的情况下只会返回一个值,目的是提高效率

public class CallableTest {
   public static void main(String[] args) throws ExecutionException, InterruptedException {

       MyThread thread = new MyThread();
       FutureTask futureTask = new FutureTask<>(thread);
       new Thread(futureTask,"A" ).start();//这里只能接收runnable接口,所以通过中间商(FutureTask)进行转换
       new Thread(futureTask,"B").start();
  }
}

class MyThread implements Callable {

   @Override
   public String call() throws Exception {

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

       return "这是一个callable()接口";
  }
}

Callable接口

 

4.futureTask.get( ),可能会存在阻塞 , 解决方法放在运行代码的最下面

 

原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/244718.html

(0)
上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐

发表回复

登录后才能评论