欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > submit和execute,以及区别

submit和execute,以及区别

2025/1/31 3:48:31 来源:https://blog.csdn.net/2301_79158740/article/details/145389072  浏览:    关键词:submit和execute,以及区别

submit和execute,以及区别

submit

submit方式适用于任务有返回结果

image-20250128203720913

方法名返回值类型描述
submit(Runnale)Future<?>提交Runnable任务
submit(Runnable,T)Future<?>提交Runnable任务并指定执行结果
submit(Callable)Future<?>提交Callable任务

他们的返回值结果都是Future对象里面,并且都带有泛型。

我们来看下Future对象;

image-20250128205749858

方法名描述
resultNow()立刻获取任务执行的结果
exceptionNow()立刻返回任务抛出的异常
get(long, TimeUnit)根据设定时间延时返回结果
get()
cancel(boolean)取消任务
state()

代码示例

ResultTask.java

class ResultTask implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}

submit(Runable)

public class Test2 {public static void main(String[] args) {//创建任务Task task = new Task();//创建线程池ExecutorService executor = Executors.newSingleThreadExecutor();try {//提交任务Future<?> future = executor.submit(task);//打印返回结果System.out.println(future.get());}catch (InterruptedException | ExecutionException e){e.printStackTrace();}finally {//关闭线程池executor.shutdown();}}
}

执行结果,没有返回值,输出null

image-20250128214557581

submit(Runnable,T)

public class Test2 {public static void main(String[] args) {//创建任务Task task = new Task();//创建线程池ExecutorService executor = Executors.newSingleThreadExecutor();try {//提交任务Future<String> future = executor.submit(task,"ok");//打印返回结果System.out.println(future.get());}catch (InterruptedException | ExecutionException e){e.printStackTrace();}finally {//关闭线程池executor.shutdown();}}
}

执行结果,输出任务指定的返回结果

image-20250128214717889

submit(Callable)

package com.javaclimb;import java.util.concurrent.*;public class Test2 {public static void main(String[] args) {//创建任务ResultTask task = new ResultTask();//创建线程池ExecutorService executor = Executors.newSingleThreadExecutor();try {//提交任务Future<Integer> future = executor.submit(task);//打印返回结果System.out.println(future.get());}catch (InterruptedException | ExecutionException e){e.printStackTrace();}finally {//关闭线程池executor.shutdown();}}
}class ResultTask implements Callable<Integer> {@Overridepublic Integer call() throws Exception {return 1+1;}
}

执行结果:正常输出任务返回结果

image-20250128214924144

execute

execute适用于任务没有返回结果的时候

package com.javaclimb;import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class Test1 {public static void main(String[] args) {//创建任务Task task = new Task();//创建线程池ExecutorService executor = Executors.newSingleThreadExecutor();//提交任务executor.execute(task);//关闭线程池executor.shutdown();}
}class Task implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}

执行结果,没有任何返回结果。

image-20250128214130473

execute和submit的区别总结

executesubmit
位置interface Executorinterface ExecutorService
提交任务类别RunnableRunable , Callable
返回值类型voidFuture<?>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com