浅谈Runnable与Callable的区别
来源:互联网 发布:linux udp 端口 编辑:程序博客网 时间:2024/05/18 22:42
每次看到Runnable和Callable都会忘记两者的一些区别,感觉两者比较像,想想是时候来一波博客来记录记录,提醒一下自己。
话不多说,先抛两个简单的例程抛砖引玉:
1.Runnable例程
package RunnableAndCallable;/** * Created by jiangxs on 17-4-24. */public class RunnableImp implements Runnable{ private String str; RunnableImp(String str){ this.str = str; } @Override public void run(){ try { //线程休眠1000毫秒,1000毫秒后继续执行,发生的异常不能抛出,需在内部处理 Thread.sleep(1000); }catch (Exception e){ e.printStackTrace(); } System.out.println( "please add String : "+str); } public static void main(String[] args) { //主线程不会发生阻塞 //开始时间 long start = System.currentTimeMillis(); //创建线程并启动线程 new Thread(new RunnableImp("Runnable Test")).start(); //结束时间 long end = System.currentTimeMillis(); System.out.println("End : "+(end - start)+"毫秒"); }}
测试结果:
End : 0毫秒please add String : Runnable TestProcess finished with exit code 0
2.Callable例程
package RunnableAndCallable;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * Created by jiangxs on 17-4-24. */public class CallableImp implements Callable<String>{ private String str ; CallableImp(String str){ this.str = str; } @Override public String call() throws Exception{ //线程休眠1000毫秒,1000毫秒后继续执行,发生的异常可以进行抛出 Thread.sleep(1000); return "please add String : "+str; } public static void main(String[] args) throws ExecutionException,InterruptedException{ Callable<String> callable = new CallableImp("Callable Test"); FutureTask<String> ft = new FutureTask<String>(callable); //开始时间 long start = System.currentTimeMillis(); //创建线程并启动线程 new Thread(ft).start(); //调用ft.get()方法阻塞主线程,不调用则不产生阻塞作用 String str = ft.get(); //结束时间 long end = System.currentTimeMillis(); System.out.println("Start : "+str); System.out.println("End : "+(end - start)+"毫秒"); }}
测试结果:
Start : please add String : Callable TestEnd : 1001毫秒Process finished with exit code 0
根据上面的两个例程可以看出Runnable和Callable这两个接口的共同点:都可以实现多线程,并且创建多线程的方式均是Thread.start()
由此可以总结两者的区别:
(1)由上面的例子我们可以看看Runnable和Callable这两个接口:
public interface Runnable{ public abstract void run();}
public interface Callable<V>{ v call() throws Exception;}
这两个接口实现的方法不同,Runnable实现的是void run()方法,而Callable实现的是V call()方法。call()方法可以返回执行结果,而run()方法没有返回值。
(2)Callable有返回结果,而Runnable无返回结果,即使通过Future也看不到任务调度结果。
(3)call()方法可以抛出受检查的异常,而run()方法不能抛出受检查的异常。
0 0
- 浅谈Runnable与Callable的区别
- Callable与Runnable区别
- Callable接口与Runnable接口的区别
- Callable和Runnable的区别
- Runnable和Callable的区别
- Runnable和Callable的区别
- Runnable和Callable的区别:
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Runnable,Callable,Future,FutureTask的区别与联系
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Java中的Callable、Future、FutureTask、Runnable的区别与示例
- sklearn中的svm参数介绍
- Struts2的工作原理详解
- SQLite--Vacuum命令(释放空间)
- Labview 串口通信
- 类与对象试验1
- 浅谈Runnable与Callable的区别
- descendantFocusability 的用法和理解+fitSystemWindow的使用
- webStrom中的批量替换
- 浏览器缓存机制
- JSP开发常见问题
- RxJava开发文档
- 【Shiny】基于R-Shiny制作地图App(百度地图)
- 【IMWeb训练营作业】小组作业 仿豆瓣app
- ant使用(一)生成jar包