我需要了解Callable和Runnable接口的区别。请以markdown形式输出信息。
user
```markdown
# Callable和Runnable接口的区别

## 接口定义

- **Runnable接口**: 定义了一个单一的`run()`方法，该方法不返回结果且不抛出检查型异常。
- **Callable接口**: 定义了一个`call()`方法，可以返回一个结果，并可以抛出异常。

## 使用场景

- **Runnable**: 适用于只需要执行任务，不关心任务执行结果的场景。
- **Callable**: 适用于需要从任务中接收结果，或者需要处理任务执行过程中可能遇到的异常的场景。

## 实现类

- **Thread类直接接受Runnable类型**，但Java提供了` Executors`类来获取`ExecutorService`，它可以直接提交`Callable`和`Runnable`任务。
- 使用`Future`对象来获取`Callable`任务的结果和控制任务的状态，对于`Runnable`任务，`Future`默认返回`null`。

## 总结

Runnable接口和Callable接口都可以用于多线程开发中，但是当任务需要返回结果或需要处理异常时，建议使用Callable接口。
```
```
assistant