【java】runnable和callable的区别

这篇具有很好参考价值的文章主要介绍了【java】runnable和callable的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

runnable和callable的区别主要在于它们的用途和实现方式。

主要区别:

  • runnable指的是一个对象能够被执行,而callable指的是一个函数或方法能够被调用。因此,可以说所有callable都是runnable,但并非所有runnable都是callable。
  • runnable通常指实现了Runnable接口的对象,它通过实现接口中的run()方法来定义可执行代码。而callable则通常指实现了Callable接口的函数或方法,它通过实现接口中的call()方法来定义可被调用的代码。
  • runnable对象可以通过创建线程来执行,而callable则可以通过使用ExecutorService执行或者作为FeatureTask的参数。

一、runnable的执行 , 作为thread的参数

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 在这里定义可在线程中执行的代码
    }
}

MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();

or

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        // 在这里定义可在线程中执行的代码
    }
});
thread.start();

二、callable的执行,被ExecutorService执行or作为FeatureTask的参数

public class MyCallable implements Callable<T> {
    @Override
    public T call() throws Exception {
        // 在这里定义可被调用的代码
    }
}

MyCallable myCallable = new MyCallable();
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<T> future = executor.submit(myCallable);
T result = future.get();

or

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<T> future = executor.submit(new Callable<T>() {
    @Override
    public T call() throws Exception {
        // 在这里定义可被调用的代码
    }
});
T result = future.get();

or
使用FeatureTask文章来源地址https://www.toymoban.com/news/detail-525195.html

Callable<Process> task = () -> {
   // 执行异步任务
   Runtime runtime = Runtime.getRuntime();
   Process process = runtime.exec("/Users/mac/Desktop/qc-java-runtime/src/main/java/com/qc/runtime/shell.sh");
   return process;
};

// 将Callable包装成FutureTask
FutureTask<Process> future = new FutureTask<>(task);

// 启动新线程来执行异步任务
new Thread(future).start();

// 获取异步任务的结果
Process result = future.get();
System.out.println(result);

到了这里,关于【java】runnable和callable的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系

    进程是资源分配的最小单位 ,进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是系统进行资源分配和调度的基本单位。进程是一个动态的概念,是一个活动的实体。 “独立功能”表示进程是面向使用者的定义,它关心的是要

    2024年02月10日
    浏览(50)
  • 编程开发8大语言详解,为什么Java是我最推荐的?

    很多没有接触过编程语言的同学,都会觉得编程开发特别高端和神奇,担心理解不了更担心学不会。 当然,也有人会认为,你既然是做编程的,那么你应该什么都会,什么软件的开发都能完成,这是平哥经常听到的两种声音。 在此,平哥需要给大家科普一下, 编程确实改变

    2024年02月05日
    浏览(70)
  • Java 高级应用-多线程-(一)实现 Runnable 接口与继承 Thread 类

    1.1 程序、进程与线程 • 程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段 静态的代码,静态对象。 • 进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。如:运行 中的 QQ,运行中的网易音乐播放器。 – 每个进程都有一

    2024年02月08日
    浏览(54)
  • 常用Java代码-Java中的Future和Callable接口

    在Java中, Future 和 Callable 接口通常用于异步编程,特别是在 java.util.concurrent 包中。这两个接口常常一起使用, Callable 对象用于生产任务的结果,而 Future 用于表示可能还未完成的任务的结果。 以下是一个简单的示例,展示了如何使用这两个接口: 在这个例子中,我们创建了

    2024年02月02日
    浏览(37)
  • Java并发编程:Callable、Future和FutureTask

    在前面的文章中我们讲述了创建线程的 2 种方式,一种是直接继承 Thread ,另外一种就是实现 Runnable 接口。 这 2 种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起

    2024年02月13日
    浏览(36)
  • 前后端开发的区别是什么?

    实际上, Vue 和后端开发的 MVC(Model-View-Controller)方式是不同的,因为它们面对的问题和场景也不同。 前端与后端的职责不同: 前端和后端的职责和任务不同。前端主要负责用户界面的展示和用户交互,而后端负责业务逻辑的处理、数据存储和提供 API 接口。因此,前端和后

    2024年02月14日
    浏览(23)
  • 小程序与普通网页开发有什么区别?

    小程序的开发同普通的网页开发相比有很大的相似性,小程序的主要开发语言也是 JavaScript,但是二者还是有些差别的。 普通网页开发可以使用各种浏览器提供的 DOM API,进行 DOM 操作,小程序的逻辑层和渲染层是分开的,逻辑层运行在 JSCore中,并没有一个完整浏览器对象,

    2024年02月09日
    浏览(37)
  • 最前端|什么是低代码?与传统开发的区别是什么?

    低代码(Low Code)是一种应用程序开发方式,可以通过“拖、拉、拽”等简单操作快速搭建软件。低代码平台提供了大量的预先构建的组件、模板和自动生成代码的功能,使得开发人员可以更快速、高效地构建程序。以下是几点说明: 可视化界面和组件库:使用拖放式的方式

    2023年04月10日
    浏览(50)
  • 大语言模型微调过程中的 RLHF 和 RLAIF 有什么区别?

            目前想要深入挖掘大型语言模型(LLM)的全部潜力需要模型与我们人类的目标和偏好保持一致。从而出现了两种方法:来自人类反馈的人力强化学习(RLHF)和来自人工智能反馈的人工智能驱动的强化学习(RLAIF)。两者都利用强化学习(RL)中的反馈循环来引导大语

    2024年04月24日
    浏览(29)
  • Java和Java大数据有什么区别?

    分别提起Java或者大数据,很多人对此都一目了然,但对于Java大数据这样一个新鲜名词,多少有些疑惑。那Java和Java大数据学习的内容是一样的吗?两者有什么区别呢?今天就从Java和Java大数据的以下方面谈谈两者的区别。 1.Java和大数据的关系 Java是计算机的一门编程语言;可

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包