Callable和Runnable的區別

	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();
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章