Callable和Runnable的区别

2021年1月15日 20点热度 0条评论 来源: MrHamster
	class c implements Callable<String>{ 
		@Override
		public String call() throws Exception { 
			return null;
		}
	}
	
	class r implements Runnable{ 
		@Override
		public void run() { 
		}
	}

相同点:

1、两者都是接口

2、两者都需要调用Thread.start启动线程

不同点:

1、如上面代码所示,callable的核心是call方法,允许返回值,runnable的核心是run方法,没有返回值

2、call方法可以抛出异常,但是run方法不行

3、因为runnable是java1.1就有了,所以他不存在返回值,后期在java1.5进行了优化,就出现了callable,就有了返回值和抛异常

4、callable和runnable都可以应用于executors。而thread类只支持runnable

测试:使用线程池来运行

public static void main(String[] args) throws Exception{ 
		//1 创建一个线程池
		//调用Executors类的静态方法
		ExecutorService service = Executors.newFixedThreadPool(10);
		//2提交runnable对象
		service.submit(new Runnable() { 
			@Override
			public void run() { 
			}
		});
		//3 提交callable对象
		service.submit(new Callable<String>() { 
			@Override
			public String call() throws Exception { 
				return null;
			}
		});
		//4 关闭线程池
		service.shutdown();
	}
    原文作者:MrHamster
    原文地址: https://blog.csdn.net/MrHamster/article/details/89891145
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。