java三种实现线程的方法比较

1.继承Thread

2.实现Runnable

1和2的比较,1可以创建不同的任务,每个任务互不干扰,对于2,相当于只执行一个任务,多个任务之间互相影响,比如售票系统,每售出一张票,票数都要减1,这个时候应该用runnable,因为当其操控的是一个实例的时候,所有实现runable的类共用这个实例资源,而runnable还有一个好处,就是有时候需要继承某个类的时候,Thread无法做到,因为它不能多继承,而runnable却可以。

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer>{
	@Override
	public Integer call() throws Exception {
		int i=0;
		for(;i<10;i++){
			Thread.sleep(10000);
			System.out.println(i);
		}
		return i;
	}
}






import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class Test {
	public static void main(String[] args){
		MyCallable myCallable=new MyCallable();
		FutureTask<Integer> ft=new FutureTask<>(myCallable);
		//方式一:采用线程池来调用线程
		ExecutorService es=Executors.newCachedThreadPool();
		es.submit(ft);
		es.shutdown();
		//方式二:采用Thread单任务模式启动线程
//		new Thread(ft).start();
	}
}

  如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。

 

posted @ 2016-09-11 21:08  麦子TMAC  阅读(188)  评论(0编辑  收藏  举报