callable和runnable的区别(callable和runnable的接口)

admin 195 0

大家好,callable和runnable的区别相信很多的网友都不是很明白,包括callable和runnable的接口也是一样,不过没有关系,接下来就来为大家分享关于callable和runnable的区别和callable和runnable的接口的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

一、线程runnable和callable的区别

(1)Callable规定的方法是call(),Runnable规定的方法是run().

(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得

(3)call方法可以抛出异常,run方法不可以

(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

1、通过实现Runnable接口来创建Thread线程:

步骤1:创建实现Runnable接口的类:

class SomeRunnable implements Runnable

Runnable oneRunnable= new SomeRunnable();

步骤3:由Runnable创建一个Thread对象:

Thread oneThread= new Thread(oneRunnable);

注释:线程的执行流程很简单,当执行代码oneThread.start();时,就会执行oneRunnable对象中的void run();方法,

该方法执行完成后,线程就消亡了。

2、与方法1类似,通过实现Callable接口来创建Thread线程:其中,Callable接口(也只有一个方法)定义如下:

public interface Callable<V>

步骤1:创建实现Callable接口的类SomeCallable<Integer>(略);

Callable<Integer> oneCallable= new SomeCallable<Integer>();

步骤3:由Callable<Integer>创建一个FutureTask<Integer>对象:

FutureTask<Integer> oneTask= new FutureTask<Integer>(oneCallable);

注释:FutureTask<Integer>是一个包装器,它通过接受Callable<Integer>来创建,它同时实现了Future和Runnable接口。

步骤4:由FutureTask<Integer>创建一个Thread对象:

Thread oneThread= new Thread(oneTask);

3、通过继承Thread类来创建一个线程:

步骤1:定义一个继承Thread类的子类:

class SomeThead extends Thraad

SomeThread oneThread= new SomeThread();

注释:这种创建线程的方法不够好,主要是因为其涉及运行机制问题,影响程序性能。

ExecutorService pool= Executors.newCachedThreadPool();

步骤2:通过Runnable对象或Callable对象将任务提交给ExecutorService对象:

Future<Integer> submit(Callable<Integer> task);

注释:Future是一个接口,它的定义如下:

public interface Future<T>

V get(long timeout, TimeUnit unit) throws...;

void cancle(boolean mayInterrupt);

注释:线程池需调用shutdown();方法来关闭线程。

5、通过事件分配线程直接使用程序中的原有线程:

直接调用EventQueue类的静态方法invokeLater():

EventQueue.invokeLater(oneRunnable);

注释:调用EventQueue.invokeLater(oneRunnable);会直接执行oneRunnable对象中的run()方法

二、Java Callable接口的call方法什么时候被调用

(1)Runnable是自从java1.1就有了,而Callable是1.5之后才加上去的

(2)Callable规定的方法是call(),Runnable规定的方法是run()

(3)Callable的任务执行后可返回值,而Runnable的任务是不能返回值(是void)

(4)call方法可以抛出异常,run方法不可以

(5)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

(6)加入线程池运行,Runnable使用ExecutorService的execute方法,Callable使用submit方法。

Callable接口也是位于java.util.concurrent包中。Callable接口的定义为:

public interface Callable<V>

三、runnable和callable有什么区别

1、Runnable和Callable是Java中两种常见的接口,它们主要在并发编程中使用,两者的主要区别如下:

2、方法:Runnable接口只有一个run()方法,该方法不返回任何值,无法抛出checked Exception;Callable接口有一个call()方法,可以返回一个值,并且可以抛出一个checked Exception。

3、返回值:Runnable的run()方法没有返回值,只是一个void类型的方法;Callable的call()方法有返回值,且返回值的类型可以通过泛型进行指定。

4、Runnable和Callable的使用场景也有所不同,Runnable通常作为Thread的构造参数开启新的线程,而Callable接口中的落地方法是call方法。

5、除了上述提到的区别,Runnable和Callable还有一些其他的区别。

6、异常处理:Runnable的run()方法不能抛出异常,如果需要抛出异常,需要另外使用其他方式处理;Callable的call()方法可以抛出异常,且可以由调用者通过Future对象来获取异常信息。

7、线程中断:Runnable接口的run()方法无法响应线程中断;Callable接口的call()方法可以响应线程中断。

8、综上所述,Runnable和Callable是各有优缺点,可以根据实际的并发需求来选择合适的接口。

四、runnable和callable区别是什么

Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已;

Callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果。

定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

class MyThread extends Thread{

System.out.println("线程开始:"+this.name+",i="+i);

五、RPC 调用和 HTTP 调用的区别

1、在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型。

2、实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。

3、我们应该将重点放在应用层和传输层这两个层面。

4、先说说RPC服务的基本架构吧,见下图:

5、一个完整的RPC架构里面包含了四个核心的组件,分别是Client, Server, Client Stub以及Server Stub。

6、什么是同步调用?什么是异步调用?

7、同步调用就是客户端等待调用执行完成并返回结果。

8、异步调用就是客户端不等待调用执行完成返回结果,不过依然可以通过回调函数等接收到返回结果的通知。如果客户端并不关心结果,则可以变成一个单向的调用。

9、这个过程有点类似于Java中的callable和runnable接口,我们进行异步执行的时候,如果需要知道执行的结果,就可以使用callable接口,并且可以通过Future类获取到异步执行的结果信息。如果不关心执行的结果,直接使用runnable接口就可以了,因为它不返回结果,当然啦,callable也是可以的,我们不去获取Future就可以了。

10、目前流行的开源RPC框架还是比较多的。下面重点介绍三种:

11、大部分企业开发的模式一直为HTTP接口开发,也就是我们常说的RESTful风格的服务接口。

12、的确,对于在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;

13、优点就是简单、直接、开发方便。

14、 POST http://www.httpexample.com/restful/buyer/info/shar

15、接口可能返回一个JSON字符串或者是XML文档。然后客户端再去处理这个返回的信息,从而可以比较快速地进行开发。

16、对于大型企业来说,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了

17、 RPC服务和HTTP服务还是存在很多的不同点的。

18、一般来说,RPC服务主要是针对大型企业的

19、 HTTP服务主要是针对小企业的,因为RPC效率更高,而HTTP服务开发迭代会更快。

20、总之,选用什么样的框架不是按照市场上流行什么而决定的,而是要对整个项目进行完整地评估,

21、从而在仔细比较两种开发框架对于整个项目的影响,最后再决定什么才是最适合这个项目的。

22、一定不要为了使用RPC而每个项目都用RPC,而是要因地制宜,具体情况具体分析。

六、java中runnable和callable的区别

Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已;

Callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果。

定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

class MyThread extends Thread{

System.out.println("线程开始:"+this.name+",i="+i);

文章到此结束,如果本次分享的callable和runnable的区别和callable和runnable的接口的问题解决了您的问题,那么我们由衷的感到高兴!