线程池
Posted zqy6666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池相关的知识,希望对你有一定的参考价值。
线程池
是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源
目的:节省资源
通常,线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法。
使用线程池方式--Runnable接口
使用线程池中线程对象的步骤:
n 创建线程池对象
n 创建Runnable接口子类对象
n 提交Runnable接口子类对象
n 关闭线程池
package com.oracle.Demo02; public class MyRunnable2 implements Runnable{ public void run() { for (int i = 0; i <100; i++) { //getName() 得到线程名称 System.out.println(Thread.currentThread().getName()+":"+i); } } } package com.oracle.Demo02; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Demo01 { public static void main(String[] args) { //从线程池工厂中创建线程池对象 ExecutorService es=Executors.newFixedThreadPool(2); //创建线程任务对象 MyRunnable2 mr=new MyRunnable2(); //提交线程任务,让线程随机挑选一条想吃执行线程任务 es.submit(mr); es.submit(mr); es.submit(mr); //释放资源 es.shutdown(); } }
使用线程池方式—Callable接口
l Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。
l ExecutorService:线程池类
n <T> Future<T> submit(Callable<T> task):获取线程池中的某一个线程对象,并执行线程中的call()方法
l Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用
l 使用线程池中线程对象的步骤:
n 创建线程池对象
n 创建Callable接口子类对象
n 提交Callable接口子类对象
n 关闭线程池
package com.oracle.Demo02; import java.util.concurrent.Callable; public class MyCallble implements Callable<String> { @Override public String call() throws Exception { // TODO Auto-generated method stub return "abc"; } } package com.oracle.Demo02; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Demo02 { public static void main(String[] args) throws InterruptedException, ExecutionException { //从线程池工厂中创建线程池对象 ExecutorService ex=Executors.newFixedThreadPool(2); //创建线程任务对象 MyCallble mc=new MyCallble(); //执行线程任务并获取call方法返回值 Future<String> f=ex.submit(mc); //从Future中获取返回值 String str=f.get(); System.out.println(str); //释放资源 ex.shutdown(); } }
以上是关于线程池的主要内容,如果未能解决你的问题,请参考以下文章