javaSE 线程池,Callable接口实现线程程序,Future接口 线程任务的执行结果。

实现子线程的三种方式:

  1.继承Thread类,重写run方法。

  2.实现Runnable接口,重写run方法。 优点:因为Runnable是接口,所以可以实现"多继承";将run方法中的具体线程业务逻辑和Thread线程的开启控制解耦。 (run方法没有返回值)

  3.实现Callable接口,重写call方法。 可以有返回值(线程任务的执行结果)。


Demo.java:

package cn.xxx.demo;

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

/*
 *  实现线程程序的第三个方式,实现Callable接口方式
 *  实现步骤
 *    工厂类 Executors静态方法newFixedThreadPool方法,创建线程池对象
 *    线程池对象ExecutorService接口实现类,调用方法submit提交线程任务
 *    submit(Callable c)
 */
public class Demo {
	public static void main(String[] args)throws Exception {
		ExecutorService es = Executors.newFixedThreadPool(2);
		//submit方法提交线程任务,返回 Future接口实现类的对象
		Future<String> result = es.submit(new ThreadPoolCallable()); // 返回的Future表示线程执行的结果。 submit可以传Runnable接口,也可以传Callable接口
		String s = result.get();  // 从Future中获取结果。
		System.out.println(s);
		
		es.shutdown();  // 关闭线程池。 (不经常用)
	}
}
ThreadPoolCallable.java(实现Callable接口,重写call方法):
package cn.xxx.demo;
/*
 * Callable 接口的实现类,作为线程提交任务出现
 * 使用方法返回值
 */

import java.util.concurrent.Callable;

public class ThreadPoolCallable implements Callable<String>{  // 实现Callable接口
	public String call(){  // 重写call方法。 可以有返回值
		return "abc";  // 可以有返回值。 线程池中用Future接口实现类接收结果。
	}
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80733794
今日推荐