Java开发必知:Runnable与Callable的四大区别及示例解析
Runnable和Callable都是Java中可以被线程执行的任务接口,但是它们有以下几个主要的区别: 1. 返回值:Runnable没有返回值,而Callable有返回值。 2. 错误处理:Runnable没有提供处理异常的机制,而Callable可以抛出未检查的异常。 3. 线程同步:Runnable不能直接使用wait(), notify()和notifyAll()方法进行线程同步,而Callable可以。 4. 使用方式:Runnable通常用于实现多线程的并发执行,而Callable通常用于实现多线程的并发计算和返回结果。 以下是一个简单的示例,展示了Runnable和Callable的区别: ```java public class RunnableExample implements Runnable { public void run() { System.out.println("Runnable running"); } } public class CallableExample implements Callable<String> { public String call() throws Exception { System.out.println("Callable calling"); return "Callable result"; } } public class Main { public static void main(String[] args) throws Exception { Thread thread1 = new Thread(new RunnableExample()); Thread thread2 = new Thread(new CallableExample()); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println("Runnable result: " + thread1.get()); System.out.println("Callable result: " + thread2.get()); } } ``` 在这个示例中,RunnableExample实现了Runnable接口,并在run方法中打印出"Runnable running"。CallableExample实现了Callable接口,并在call方法中打印出"Callable calling",并返回"Callable result"。 在main方法中,我们创建了两个线程,一个使用RunnableExample,一个使用CallableExample。我们启动这两个线程,并等待它们完成。然后,我们尝试从RunnableExample和CallableExample中获取结果。由于Runnable没有返回值,所以尝试从RunnableExample中获取结果会导致NullPointerException。而CallableExample有返回值,所以我们可以从CallableExample中获取到结果。 ######[AI小红书种草文 | 413点数解答 | 2023-11-07 22:17:40]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)407
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)24
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)308
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1139
- C++开发必知:new int[10] 与 new int[10]() 的关键区别 (阿里通义 | 196点数解答 | 2023-11-09 00:45:31)324
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)265
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)263
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)278
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)308
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)320
- Javascript开发必知:jQuery中$.get()与$.post()的六大区别(阿里通义 | 341点数解答 | 2023-11-09 01:15:01)304
- PHP开发必知:isset() 与 empty() 函数的区别解析(百度文心 | 340点数解答 | 2023-11-09 17:57:11)314