`

A TaskExecutor Impl

阅读更多
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.log4j.Logger;

public class SyncTaskExecutor {
    private Logger logger = Logger.getLogger(SyncTaskExecutor.class);
   
    private BlockingQueue<SyncTask> syncTaskQueue;
    private ExecutorService threadPool;
    private WorkingThread workingThread;
   
    public SyncTaskExecutor() {
        syncTaskQueue = new ArrayBlockingQueue<SyncTask>(100);
        threadPool = Executors.newFixedThreadPool(8);
        workingThread = new WorkingThread();
    }
   
    public SyncTaskExecutor(ExecutorService threadPool){
        syncTaskQueue = new ArrayBlockingQueue<SyncTask>(100);
        this.threadPool = threadPool;
        workingThread = new WorkingThread();
    }
   
    public void addTask(SyncTask task){
        try {
            syncTaskQueue.put(task);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
   
     class WorkingThread extends Thread{
            @Override
            public void run() {
                while(true){
                    SyncTask syncTask;
                    try {
                        logger.info("executing a task!");
                        syncTask = syncTaskQueue.take();
                        threadPool.execute(syncTask);
                    } catch (InterruptedException e) {
                    }
                }
            }
    }

    public void start() {
        workingThread.start();
        logger.info("SyncTaskExecutor start!");
    }

    public void shutdown() {
        workingThread.interrupt();
        logger.info("SyncTaskExecutor shutdown!");
    }
   
    public static void main(String[] args) throws InterruptedException {
        SyncTaskExecutor executor = new SyncTaskExecutor();
        executor.start();
        SyncTask task = new DefaultSyncTask();
        List<String> syncUrlList = new ArrayList<String>();
        syncUrlList.add("http://localhost:8080/PublishSystem/publish/db.sql");
        syncUrlList.add("http://localhost:8080/PublishSystem/publish/test.txt");
        task.setSyncUrlList(syncUrlList);
        executor.addTask(task);
        Thread.currentThread().sleep(5000);
        executor.shutdown();
    }
}

使用BlockingQueue实现一个发布和同步的TaskExecutor

0
0
分享到:
评论

相关推荐

    spring TaskExecutor.docx

    Spring的TaskExecutor是Java线程池抽象的一个重要组成部分,它为开发者提供了一种在Spring框架内使用线程池的方式,而无需直接依赖于特定的Java版本或Java EE环境中的线程池实现。TaskExecutor接口的设计使得在不同...

    spring-task:Spring TaskExecutor演示

    Spring TaskExecutor是Spring框架中的一个核心组件,它提供了一种在后台执行任务的机制,使得开发者可以方便地异步处理任务,提高应用的性能和响应速度。本篇将深入探讨Spring TaskExecutor的基本概念、使用方法以及...

    征服 Kestrel + XMemcached + Spring TaskExecutor

    标题中的“征服 Kestrel + XMemcached + Spring TaskExecutor”揭示了本次讨论的核心内容,涉及到三个关键的技术组件:Kestrel、XMemcached以及Spring的TaskExecutor。这些技术都是在构建高性能、可扩展的分布式系统...

    TaskExecutor:TaskExecutor是健壮,统一和集中式异步Task执行框架的实现。 任务将保留在磁盘上,以适应configurationChanges,创建新的Activity,甚至在进程终止后都可以生存。 通过许多选项,几乎可以保证您的任务可以执行,并通过硬回调直接回发到当前活动

    TaskExecutor TaskExecutor解决什么问题? 我见过太多项目,其中AsyncTask和线程通常是在没有考虑的情况下完成的。 我什至看过匿名的AyncTask实现:( TaskExecutor将所有异步活动整合到一个ExecutorService中,可以...

    TaskExecutor:Java通用任务执行器,基于java.util.concurrent.ScheduledExecutorService

    TaskExecutor Java通用任务执行程序,基于java.util.concurrent.ScheduledExecutorService。 Java通用的任务执行器,基于java.util.concurrent.ScheduledExecutorService工具类实现。 Maven: &lt;groupId&gt;...

    kestrel-task-executor:Kestrel + XMemcached + Spring TaskExecutor

    【Kestrel任务执行者:Kestrel + XMemcached + Spring TaskExecutor】 在Java开发领域,高效的任务调度和执行是关键部分,特别是在分布式系统中。这个项目名为"kestrel-task-executor",它结合了Kestrel消息队列、...

    Spring 异步多线程动态任务处理的使用心得

    public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); // 核心线程数 executor.setMaxPoolSize(10); // 最大线程数 executor...

    spring 线程池实例

    private TaskExecutor taskExecutor; public void executeAsyncTask(Runnable task) { taskExecutor.execute(task); } ``` 在`spring3.0.5_TaskExecutor`这个压缩包中,可能包含了Spring 3.0.5版本关于线程池的...

    spring调度器

    Spring调度器主要由两个核心组件组成:`TaskExecutor`和`TaskScheduler`,它们分别用于异步执行任务和计划任务。 **TaskExecutor** `TaskExecutor`是Spring提供的一个接口,用于执行异步任务。通过实现这个接口,你...

    解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题

    "解决SpringBoot项目使用多线程...使用TaskExecutor机制可以解决该问题,通过在配置文件中添加TaskExecutor的配置,并在Controller层中使用@Autowired注解来注入TaskExecutor,然后使用TaskExecutor来执行我们的任务。

    Spring3.2.6定时任务+线程池.docx

    &lt;property name="taskExecutor" ref="taskExecutor"/&gt; &lt;!-- 要启动的主线程 --&gt; &lt;!-- 容器加载运行延迟1秒 --&gt; &lt;!-- 任务间隔时间(sleep时间)执行完第一组任务,执行第二组任务相隔时间,两个任务在...

    spring调度器用到的jar

    public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); executor.setQueueCapacity(20); ...

    策略模式的实例代码demo

    TaskExecutor executor = new TaskExecutor(new HighPriorityTaskExecutionStrategy()); executor.execute(highPriorityTask); // 执行高优先级任务 executor = new TaskExecutor(new ...

    spring线程池(同步、异步).docx

    Spring通过其`TaskExecutor`接口提供了对线程池的支持,该接口定义了异步执行任务的方法。以下是关于Spring线程池(同步、异步)的详细解析: 一、Spring异步线程池类图 Spring提供了一系列的`TaskExecutor`实现,...

    Java简单的回调(interface)demo

    TaskExecutor executor = new TaskExecutor(); executor.executeTask(myTask); } } ``` 通过这种方式,`TaskExecutor`可以在完成任务后通知`MyTask`,而无需了解`MyTask`的具体实现。这种松散耦合的特性使得代码...

    java线程池execute源码-android-lite-async:Crossbow(LiteAsync)是一个改进的、增强的Androi

    TaskExecutor which can executes ordered, cyclicbarrier, delayed and timer Task. #同学们在日常开发中有没有遇到以下场景: 两个原子任务,任务2需要等待任务1完成了才能进行。 任务3需要等任务1和任务2都完成了...

    springboot.zip

    @Qualifier("eventExecutor") TaskExecutor taskExecutor) { SimpleApplicationEventMulticaster multicaster = new SimpleApplicationEventMulticaster(); multicaster.setTaskExecutor(taskExecutor); return ...

    Spring提供的线程池支持[借鉴].pdf

    `TaskExecutor`接口是Spring为各种线程池服务提供的一种抽象,它的目的是统一客户端的视图,允许应用程序无需关心底层实现。这个接口仅有一个`execute(Runnable task)`方法,用于提交一个可运行的任务,根据具体实现...

    Spring实现任务调度.rar

    Spring通过其`Task`模块提供了任务调度的功能,主要由两个核心组件构成:`TaskExecutor`和`TaskScheduler`。`TaskExecutor`用于异步执行任务,而`TaskScheduler`则用于计划未来的任务执行。这两个接口提供了灵活的...

    一文详解Spring任务执行和调度(小结)

    这篇文章将对Spring中的TaskExecutor和TaskScheduler接口进行详细讲解,并通过示例代码帮助理解它们的使用。 **一、TaskExecutor** TaskExecutor是Spring 2.0引入的抽象接口,用于执行异步任务。它与Java 5的`java...

Global site tag (gtag.js) - Google Analytics