`

Executor 的使用实例

    博客分类:
  • java
 
阅读更多
class SerialExecutor implements Executor {
     final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
     final Executor executor;  //添加这个进来的目的就是为了执行executor中的execute()方法。
     Runnable active;

     SerialExecutor(Executor executor) {
         this.executor = executor;
     }

     public synchronized void execute(final Runnable r) {
         //这里没有run()方法哦!
         tasks.offer(new Runnable() {  //这里只是放进去,并没有执行
             public void run() {
                 try {
                     r.run();                     //3
                 } finally {
                     scheduleNext();
                 }
             }
         });

         if (active == null) {
             scheduleNext();  //放进去,又取出来了,tasks中没有了
         }
     }

     protected synchronized void scheduleNext() {
         if ((active = tasks.poll()) != null) {         //active中有run()方法。
             executor.execute(active);             //1 若把executor改成this,就不能得到数据了,
                                                   //因为它的execute()方法中没有run()方法。
         }
     }

     public void display()
     {
         if(tasks.isEmpty())
             System.out.println("this is null");
         for(Runnable r :tasks)
         {
             System.out.println(r.toString());
         }
     }

     public static void main(String[] args)
     {
         Runnable r1 = new Runnable(){
            public void run() {
                int i = 0;
                System.out.println("i = " +(++i));
            }
         };
         Runnable r2 = new Runnable(){
            public void run() {
                int a = 3;
                System.out.println("a = " +(++a));
            }
         };
         Runnable r3 = new Runnable(){
            public void run() {
                int b = 7;
                System.out.println("b = " +(++b));
            }
         };

         SerialExecutor executor = new SerialExecutor(new Executor(){
            public void execute(Runnable command) {
                command.run();             //2
            }
         });

         executor.execute(r1);
         executor.execute(r2);
         executor.execute(r3);
         executor.display();

     }
 }

 

分享到:
评论

相关推荐

    Executor框架使用详解

    `Future`常与`ExecutorService`的`submit()`方法一起使用,返回一个`Future`实例,可以通过该实例监控任务状态。 `CompletionService`接口扩展了`ExecutorService`,它提供了获取已完成任务的便捷方式,特别适用于...

    Android Executor线程池

    本文将深入探讨`Android Executor`线程池的工作原理、优势以及如何在实际开发中使用。 一、`Executor`线程池简介 `Executor`框架是Java并发编程的重要组成部分,由`java.util.concurrent`包提供。它提供了一种更加...

    mybatis中的sqlsession--executor实现.zip

    MyBatis的动态代理机制会在内部根据配置选择合适的Executor实例。 总结来说,`SqlSession`和`Executor`是MyBatis实现数据库操作的关键组成部分。`SqlSession`作为用户接口,提供了一套完整的数据库操作API,而`...

    Java Executor 框架的实例详解

    Executor 框架的实例详解可以帮助开发者更好地理解和使用 Executor 框架,以下是 Java Executor 框架的实例详解的相关知识点: 一、Executor 框架的介绍 Executor 框架是 Java 中一个高级的并发编程模型,提供了一...

    xxl-job-executor-go-master

    3. **执行器集群**:多个执行器实例可以组成一个集群,任务可以在集群内负载均衡地分配和执行。 **Go执行器的架构** "xxl-job-executor-go-master"包含的主要模块可能有: 1. **注册与心跳**:执行器需要向调度中心...

    Python库 | Flask_Executor-0.3.1-py3-none-any.whl

    为了解决这个问题,开发者可以使用 **Flask_Executor** 这个库,它提供了对异步任务的支持。 **Flask_Executor** 的工作原理是,通过后台线程或进程运行用户定义的函数,这些函数可以在Web请求处理完成后执行,或者...

    Mybatis原始执行方式Executor代码实例解析

    在本文中,我们将详细介绍Mybatis原始执行方式Executor代码实例解析,包括Executor的分类和使用示例。 Executor分类 ---------- Mybatis提供了四种类型的Executor,每种类型都有其特点和应用场景。 ### 1. ...

    Executor,Executors,ExecutorService比较.docx

    通常,我们不会直接使用`Executor`,而是使用它的子接口`ExecutorService`,因为`ExecutorService`提供了更多的功能,如任务的提交、管理和关闭线程池。 2. **Executors** `Executors`是`java.util.concurrent`包...

    1_Executor源码阅读1

    Java中的`Executor`接口是并发编程的核心组件,它位于`java.util.concurrent`包下,主要目的是接收客户端提交的任务(以`Runnable`实例的形式)并负责执行。`Executor`接口简化了多线程编程,使得任务的创建和执行...

    PyPI 官网下载 | executor-21.1.tar.gz

    # 创建Executor实例 ex = Executor() # 执行命令 output = ex.run('ls -l') # 输出结果 print(output) ``` 总的来说,executor库为Python开发者提供了一个强大且安全的工具,用于在Python环境中执行系统命令。...

    线程池之Executor框架.docx

    - **任务**:Executor框架处理的主要对象是任务,任务可以是实现`Runnable`接口的实例,也可以是实现`Callable`接口的实例。`Runnable`接口的任务没有返回值,而`Callable`接口的任务可以返回一个结果。 - **任务...

    apache zookeeper使用方法实例详解

    Apache ZooKeeper 使用方法实例详解 Apache ZooKeeper 是一个高效、可靠、易于使用的分布式协同服务,它可以为分布式应用提供统一命名服务、配置管理、状态同步和组服务等。 ZooKeeper 的主要特点是提供了一个简洁...

    Java-Executor并发框架.docx

    Java并发框架中的Executor服务是...总之,Java的Executor并发框架是多线程编程的强大工具,理解并熟练使用ExecutorService和相关工厂类,能够帮助开发者更好地设计和优化并发程序,提高系统的并发性能和资源利用率。

    Java并发编程利器:Executor框架深度解析与应用实践

    本文将深入探讨Executor框架的设计哲学、核心组件,并结合实例演示如何利用这一框架提升程序的性能和响应性。 注意事项和最佳实践 合理配置线程池大小:根据系统的负载和任务的性质来决定线程池的大小。 资源清理:...

    springmvc配置线程池Executor做多线程并发操作的代码实例

    SpringMVC配置线程池Executor做多线程并发操作的代码实例 在本文中,我们将探讨如何使用SpringMVC框架来配置线程池Executor,以实现多线程并发操作。线程池Executor是Spring框架提供的一种线程池实现,它允许我们在...

    针对于Executor框架,Java API,线程共享数据

    下面将详细介绍使用Executor框架的主要好处: - **简化线程管理**:Executor框架简化了线程的创建和管理过程。开发者无需关心底层的线程细节,只需关注任务的提交和执行即可。这极大地降低了多线程编程的难度。 - *...

    java并发编程:Executor、Executors、ExecutorService.docx

    传统的创建线程方式是通过`new Thread(new RunnableTask()).start()`,但使用Executor,可以通过`executor.execute(new RunnableTask())`异步执行任务,简化了代码并提高了可维护性。 2. ExecutorService: ...

    Python库 | qcg_pilotjob_executor_api-0.12.3-py3-none-any.whl

    # 创建Pilotjob实例 executor = qcg.pilotjob.executor.Executor() # 提交Pilotjob pilotjob = executor.submit_pilotjob(parameters) # 监控Pilotjob状态 status = executor.get_pilotjob_status(pilotjob_id) #...

    async-executor:异步执行器

    例子 use async_executor :: Executor; use futures_lite :: future; // Create a new executor. let ex = Executor :: new (); // Spawn a task. let task = ex. spawn ( async { println! ( "Hello world" ); });...

    executor-k8s:Kubernetes螺丝刀执行器

    该类提供了几个在此Executor的实例化中可配置的选项 范围 类型 默认 描述 配置 目的 配置对象 config.kubernetes 目的 {} Kubernetes配置对象 config.kubernetes.token 细绳 '' 用于对Kubernetes集群进行身份...

Global site tag (gtag.js) - Google Analytics