一、实现Callable接口方式
1、创建一个实现Callable接口的实现类
class numthread implements callable{}
2、实现Call方法,将此线程需要执行的操作声明在Call()中
@override
public object call() throws exception{
//分线程执行的操作
}
3、创建callable接口实现类的对象
Numthread numthread=new Numthread();
4、将此callable接口实现类的对象作为参数传递到FutureTask构造器中,创建FutureTask对象
FutureTask futureTask = new FutureTask(numthread);
5、将FutureTask类的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()方法
new Thread(futurTask).start();
6、获取Callable中的call方法的返回值。(返回值可有可无)
如何理解实现Callable接口方式创建多线程比实现Runnable接口创建多线程接口的方式强大?
Callable()中call()方法:可以抛异常被外面操作捕获、可以有返回值。
Callabl()支持泛型:<>
二、使用线程池的方式
1、提供指定线程数量的线程池
ExecutorService service = Executors.newFixedThreadPool(100);
2、执行现成的擦做。需要提供实现Runnable接口或者Callable接口的实现类的对象。
service.excute(new NumberThread());适用于Runnable接口
service.submit(new NumberThread());适用于Callable接口
3、关闭连接池
service.shutdown();
好处:
1)提高响应速度(减少了创建新线程的时间)
2)降低资源消耗(重复利用线程池中的线程,不需要每次都构建)
3)便于线程的管理