线程池
一、线程池概念
线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源

二、使用线程池方式--Runnable接口
1.Executors:线程池创建工厂类
public static ExecutorService newFixedThreadPool(int nThreads):返回线程池对象
2.ExecutorService:线程池类
Future<?> submit(Runnable task):获取线程池中的某一个线程对象,并执行
3.Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用
4.使用线程池中线程对象的步骤:
创建线程池对象
创建Runnable接口子类对象
提交Runnable接口子类对象
关闭线程池
代码:
package com.oracle.Runnable; public class MyRunnable implements Runnable{ @Override public void run() { for(int i=0;i<50;i++){ System.out.println("run-----"+i); } } }
package com.oracle.Runnable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Demo03 { public static void main(String[] args) { // Executors 线程池工厂类 // ExecutorService 线程池工厂类 // 获取线程池对象 ExecutorService es = Executors.newFixedThreadPool(2); // 创建线程任务对象 MyRunnable mr = new MyRunnable(); // 执行线程任务 es.submit(mr); es.submit(mr); es.submit(mr); //释放资源 es.shutdown(); } }
运行结果:

三、使用线程池方式—Callable接口
1.Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。
2.ExecutorService:线程池类
3.<T> Future<T> submit(Callable<T> task):获取线程池中的某一个线程对象,并执行线程中的call()方法
4.Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用
使用线程池中线程对象的步骤:
1.创建线程池对象
2.创建Callable接口子类对象
3.提交Callable接口子类对象
4.关闭线程池
代码:
package com.oracle.Runnable; import java.util.concurrent.Callable; public class MyCallable implements Callable<String> { public String call() throws Exception { return "abc"; } }
package com.oracle.Runnable;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future;
public class Demo04 { public static void main(String[] args) throws InterruptedException, ExecutionException { //创建线程任务 MyCallable mc=new MyCallable(); //获取线程池工厂 ExecutorService es=Executors.newFixedThreadPool(2); Future<String> f=es.submit(mc); //创建返回值 String str=f.get(); System.out.println(str); } }
运行结果:


浙公网安备 33010602011771号