• Executor接口实现线程池管理


    从JDK5开始,在java.util.concurrent包下增加了Executor接口及其子类,允许使用线程池技术来管理线程并发问题。Executor接口提供了一个常用的ExecutorService子接口,通过该子接口可以很方便地进行线程池管理。

    通过Executor接口实现线程池管理的主要步骤如下:

    (1)创建一个实现Runnable接口或者Callable接口的实现类,同时重写run()或者call()方法;

    (2)创建Runnable接口或者Callable接口的实现类对象;

    (3)使用Executors线程执行器类创建线程池;

    (4)使用ExecutorService执行器服务类的submit()方法将Runnable接口或者Callable接口的实现类对象提交到线程池进行管理;

    (5)线程任务执行完成后,可以使用shutdown()方法关闭线程池。

    接下来通过一个案例来演示如何通过Executor接口来实现线程池管理,如例10-18所示。

    例10-18 Example18.java

    1. import java.util.concurrent.*;
    2. //1.定义一个实现Callable接口的实现类
    3. class MyThread4 implements Callable<Object>{
    4. //1.1重写callable接口的cal1()方法
    5. public Object call () throwa Exception {
    6. int i=0;
    7. while (i++<5)(
    8. System.out.println(Thread.currentThread().getName()
    9. +“的cal1()方法在运行“);
    10. }
    11. return 1;
    12. }
    13. }
    14. public class Examplel8 {
    15. public static void main(String[] args) throws InterruptedException,
    16. ExecutionException (
    17. //2.创建Callable接口的实现类对象
    18. MyThread4 myThread4 =new MyThread4();
    19. //3.使用Executors线程执行器类创建可扩展的线程池
    20. ExecutorService executor =Executors.newCachedThreadPool () ;
    21. //4.将cal1able接口实现类对象提交到线程池进行管理
    22. Future<Object>resultl=executor.submit(myThread4);
    23. Future<Object>result2=executor.submit(myThread4);
    24. //5.关闭线程池
    25. executor. shutdown ();
    26. //对于有返回值的线程任务,获取执行结果
    27. System.out.println("thread-1返回结果:"+result1.get());
    28. System.out.println("thread-2返回结果:"+result2.get());
    29. }
    30. }

    从图10-22可以看出,例10-18所示的案例创建了一个自定义的线程池executor(线程池默认生成名称为pool-1),在该线程池中管理有两个默认生成名称的线程thread-1和thread-2,同时还可以获取这两个线程的执行结果。

    在例10-18所示的案例中,线程池是通过Executors的newCachedThreadPool()方法创建的,Executors是JDK5中增加的线程执行器工具类,提供了4种方法来创建用于不同需求的线程池

     

  • 相关阅读:
    Intel oneAPI笔记(3)--jupyter官方文档(SYCL Program Structure)学习笔记
    go.sum文件的作用
    第70讲:MySQL数据库全局锁的核心概念
    mt4量化交易接口:分享日常量化选股方法
    8.3.6 修改字段的位置
    [AI Agent学习] MetaGPT源码浅析
    Objective-C中的Block(基础)
    Java使用Validator类进行实体属性格式验证(一次性返回所有验证结果)
    [思维]Party Codeforces1711B
    Spring学习(2) Spring的IOC底层实现
  • 原文地址:https://blog.csdn.net/Blue92120/article/details/128015201