线程池(实现多线程的第三种方式)
程序员文章站
2022-07-10 18:15:52
...
线程池(实现多线程的第三种方式)
**步骤:**
1:自定义一个类,实现Callable接口
2:实现里面的call方法
3:主线程中创建线程对象
4:用线程池对象提交任务
5:提交后结束线程池
启动新的线程,很耗费成本,线程池有一个好处:
里面可以存储多条线程,每一条线程执行完毕,不会变成垃圾,等待下次继续使用!
使用线程池可以解决很多问题:
1)如何创建线程池对象:
Executors工厂:专门用来创建线程池的:提供了一个方法
public static ExecutorService newFixedThreadPool(int nThreads)
2)这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法
Future<?> submit(Runnable task):Runnable接口作为一个参数:要该类的子实现类对象
<T> Future<T> submit(Callable<T> task):Future 表示异步计算的结果 接口
3)线程池可以结束吗?
可以
void shutdown()
需求:
用线程池实现求和
代码:
public class MyThreadPool implements Callable{
private int number;
public MyThreadPool(int number){
this.number= number;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int x = 0;x<=number;x++){
sum +=x;
}
return sum;
}
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
//创建线程池对象
ExecutorService es = Executors.newFixedThreadPool(2);
//启动线程池
Future<Integer> f1 =es.submit(new MyThreadPool(100));
Future<Integer> f2 =es.submit(new MyThreadPool(45));
//获取结果
int n1 = f1.get();
int n2 = f2.get();
System.out.println(n1);
System.out.println(n2);
}
}
代码结果:
5050
1035
上一篇: Java创建线程的第三种方式
下一篇: 实现多线程的第三种方式之Callable