java中线程池的使用
impl类 implements Runnable:
package 线程池; public class Impl implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"创建了新的线程"); } }
demo测试类:
package 线程池; //线程池就是一个集合,一个容器,可以使用LinkedList<Thread> 或者ArrayList<Thread> //使用线程的时候,就从线程池(集合)中获取一个Thread th,用完再还回去(重新放回集合之中) //jdk1.5后内置了线程池 //线程池中的线程可以重复多次使用 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 线程池:是jdk1.5之后提供的, * java.util.concurrent.Executors是线程的工厂类,用于生产线程池 * 该类中有个生产线程池的方法: 生产指定线程数量的线程池:static ExecutorService newFixedThreadPool(int threadNum);//返回值为接口类型 * 可以使用ExecutorService接收,(面向接口编程) * <p> * java.util.concurrent.ExecutorService是线程池的接口 * 用于从线程池中获取线程调用start方法执行线程任务: submit(Runnable task) * 关闭或销毁线程池的方法: shutdown() * <p> * 线程池的使用步骤: * 1 使用线程池的工程类java.util.concurrent.Executors 中的静态方法static ExecutorService newFixedThreadPool(int threadNum);方法生产指定 * 线程数量的线程池 * 2 创建一个类,实现Runnable接口,重写run方法以便设置线程任务 * 3 调用ExecutorService接口中的submit方法,传递第二步中的实现类对象,以便开启线程执行线程的任务 * 4 调用ExecutorService接口中的shutdown方法,销毁线程池,但是不建议销毁线程池 */ public class Demo01 { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(2); // 设置三个任务 executorService.submit(new Impl());//pool-1-thread-1创建了新的线程 executorService.submit(new Impl());//pool-1-thread-2创建了新的线程 executorService.submit(new Impl());//pool-1-thread-2创建了新的线程 // 上面其实创建了三个任务,线程池中只有2个线程,那么某个线程使用完毕后自动将线程归还给线程池,继续执行新的任务 // executorService.shutdown();//不建议执行,执行本行代码之后程序也会终止 }//main }