1.接口实现的方法不同 Runnable 需要实现run()方法 Callable 需要实现call()方法 2.返回值不同 Runnable run()方法不允许指定返回值 Callable Call()方法允许指定返回值,返回值是一个泛型,可以通过futureRask.get()方法来获取到线程执行的结果,但是此方法会阻塞主线程的执行,知道子线程任务执行完成并返回结果 3.异常处理 Runnable run()方法不能抛出异常 Callable call()方法允许抛出异常