线程池

线程池

使用线程池

  • 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。

  • 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建和销毁,实现重复利用。类似生活中的公共交通工具。

  • 好处:

    • 提高响应速度(减少了创建新线程的时间)

    • 降低资源消耗(重复利用线程池中线程,不需要每次都创建)

    • 便于线程管理(......)

      • corePoolSize:核心池的大小

      • maximumPoolSize:最大线程数

      • keepAliveTime:线程没有任务时最多保持多长时间后会终止

  • JDK 5.0起提供了线程池相关API:ExecutorServiceExecutors

  • ExecutorService:真正的线程池接口。常见子类 ThreadPoolExecutor

    • void execute(Runnable command):执行任务 / 命令,没有返回值,一般用来执行 Runnable

    • <T>Future<T>submit(Callable<T> task):执行任务,有返回值,一般用来执行 Callable

    • void shutdown():关闭连接池

  • Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池

 

 //测试线程池
 public class TestPool {
     public static void main(String[] args) {
         //1.创建线程池
         //newFixedThreadPool 参数为:线程池大小
         ExecutorService service = Executors.newFixedThreadPool(10);
 
         //执行
         service.execute(new MyThread());
         service.execute(new MyThread());
         service.execute(new MyThread());
         service.execute(new MyThread());
 
         //2.关闭连接
         service.shutdown();
    }
 }
 
 class MyThread implements Runnable{
     @Override
     public void run() {
         System.out.println(Thread.currentThread().getName());
    }
 }
 

 

 //回顾总结线程的创建
 public class ThreadNew {
     public static void main(String[] args) {
         new MyThread1().start();
 
         new Thread(new MyThread2()).start();
 
         FutureTask<Integer> futureTask = new FutureTask<Integer>(new MyThread3());
         new Thread(futureTask).start();
 
         try {
             Integer integer = futureTask.get();
             System.out.println(integer);
        } catch (InterruptedException e) {
             e.printStackTrace();
        } catch (ExecutionException e) {
             e.printStackTrace();
        }
    }
 }
 
 //1.继承Thread类
 class MyThread1 extends Thread{
     @Override
     public void run() {
         System.out.println("My Thread One");
    }
 }
 
 //2.实现Runnable接口
 class MyThread2 implements Runnable{
     @Override
     public void run() {
         System.out.println("My Thread Tow");
    }
 }
 
 //3.实现Callable接口
 class MyThread3 implements Callable<Integer>{
     @Override
     public Integer call() throws Exception {
         System.out.println("My Thread Three");
         return 100;
    }
 }
 
 
posted @ 2022-07-07 09:17  小gun  阅读(157)  评论(0)    收藏  举报