org.voovan.tools.event.EventRunnerGroup Maven / Gradle / Ivy
package org.voovan.tools.event;
import org.voovan.tools.threadpool.ThreadPool;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
/**
* 事件执行管理器
*
* @author: helyho
* Voovan Framework.
* WebSite: https://github.com/helyho/Voovan
* Licence: Apache v2 License
*/
public class EventRunnerGroup {
private AtomicInteger indexAtom = new AtomicInteger();
private EventRunner[] eventRunners;
private ThreadPoolExecutor threadPool;
private int size;
/**
* 构造方法
* @param threadPoolExecutor 用于分发任务执行的线程池
* @param size 容纳事件执行器的数量
* @param attachmentSupplier 事件执行器的附属对象构造器
*/
public EventRunnerGroup(ThreadPoolExecutor threadPoolExecutor, int size, Function attachmentSupplier) {
this.size = size;
this.threadPool = threadPoolExecutor;
eventRunners = new EventRunner[size];
for(int i=0;i{
int newVal = val + 1;
return (size == newVal) ? 0 : newVal;
});
EventRunner eventRunner = eventRunners[index];
return eventRunner;
}
/**
* 静态构造方法
* @param groupName 事件执行器名称
* @param size 容纳事件执行器的数量
* @param threadPriority 线程优先级
* @param attachmentSupplier 事件执行器的附属对象构造器
* @return 事件执行管理器
*/
public static EventRunnerGroup newInstance(String groupName, int size, int threadPriority, Function attachmentSupplier){
ThreadPoolExecutor threadPoolExecutor = ThreadPool.createThreadPool(groupName, size, size, 60*1000, true, threadPriority);
return new EventRunnerGroup(threadPoolExecutor, size, attachmentSupplier);
}
}