ChatGPT:Runnable 的execute和submit,与callable的submit有什么区别?

ChatGPT:Runnable 的execute和submit,与callable的submit有什么区别?



在Java中,RunnableCallable 接口都用于表示可以由线程执行的任务。它们之间的主要区别在于Callable可以返回结果并抛出受检查异常,而Runnable不能。

ExecutorService 接口是用于执行这些任务的,它提供了不同的方法来提交任务并执行它们。其中,execute()submit() 是两个常用的方法,它们的区别主要在于接受不同类型的任务。

  1. execute(Runnable task) 方法接受一个 Runnable 任务并执行它,但不返回任何结果。如果任务抛出未捕获的异常,该异常会被线程池捕获并记录。

    ExecutorService executor = Executors.newFixedThreadPool(1);
    executor.execute(() -> System.out.println("Hello from Runnable"));
    
  2. submit(Callable<T> task) 方法接受一个 Callable 任务并执行它,返回一个 Future 对象,可以用来获取任务执行的结果。Future 对象的 get() 方法可以阻塞当前线程直到任务完成并返回结果,或者在指定的超时时间内等待。

    ExecutorService executor = Executors.newFixedThreadPool(1);
    Future<String> future = executor.submit(() -> {
        Thread.sleep(1000);
        return "Hello from Callable";
    });
    String result = future.get();
    System.out.println(result);
    

总的来说,execute() 方法用于执行没有返回值的任务,而 submit() 方法用于执行有返回值的任务。在处理异常时,execute() 方法将异常记录下来,而 submit() 方法则将异常封装在 Future 中,需要通过 get() 方法来获取并处理异常。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值