线程的三种创建方式

public class Web12306 {
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		
		// 方式 1  继承Thread类,重写run方法
		ThreadTest01 test01  = new ThreadTest01();
		test01.start();
		// 方式2 实现Runnable接口,重写run方法 使用静态代理调用线程
		ThreadTest02 test02  = new ThreadTest02();
		Thread thread  = new Thread(test02);
		thread.start();
		// 方式3 实现Callable接口,重写call方法
		ExecutorService service = Executors.newFixedThreadPool(1);
		ThreadTest03 test03 = new ThreadTest03();
		Future<Integer> result = service.submit(test03);
//		System.out.println(result);  返回的是 java.util.concurrent.FutureTask@154174f9
		Integer num=0;
		num =result.get();
		System.out.println(num);
		service.shutdown();
		
	}
}
// 多线程的三种方式
class ThreadTest01 extends Thread{

	@Override
	public void run() {
		for(int i =0;i<20;i++){
		System.out.println("ThreadTest01");
		}
	}
}
class ThreadTest02 implements Runnable{

	@Override
	public void run() {
		for(int i =0;i<20;i++){
			System.out.println("ThreadTest02");
			}
	}
}
class ThreadTest03 implements Callable<Integer>{

	Integer in = 10;
	@Override
	public Integer call() throws Exception {
		for(int i =0;i<100;i++){
			System.out.println("ThreadTest03");
			/*if(i==20){
				System.out.println(in);
				return this.in;*/
			}
//		}
		return in;
	}
}

优缺点比较:

继承Thread类:不利于再继承其他类;

实现Runnable接口:没有返回值,不能抛出异常;优点,可以使用多个代理代理同一个对象。

实现Callable接口:代码略繁琐。优点有返回值


猜你喜欢

转载自blog.csdn.net/qq_28385797/article/details/72842939
今日推荐