All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.taskurotta.service.executor.mem.MemoryOperationExecutor Maven / Gradle / Ivy

package ru.taskurotta.service.executor.mem;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.taskurotta.service.executor.Operation;
import ru.taskurotta.service.executor.OperationExecutor;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

public class MemoryOperationExecutor implements OperationExecutor {

    private BlockingQueue queue;

    public MemoryOperationExecutor(String name, Object nativePoint, int queueCapacity, int poolSize) {
        this.queue = new LinkedBlockingQueue<>(queueCapacity);

        MemoryOperationExecutor.startWorkers(name, nativePoint, queue, poolSize);

    }

    public static void startWorkers(final String name, final Object nativePoint, final BlockingQueue queue,
                                    int poolSize) {

        final Logger logger = LoggerFactory.getLogger(OperationExecutor.class);

        for (int i = 0; i < poolSize; i++) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {

                    while (true) {
                        Operation operation = null;

                        try {
                            operation = queue.poll(1, TimeUnit.SECONDS);

                            if (operation == null) {
                                continue;
                            }

                            operation.init(nativePoint);

                            try {
                                operation.run();
                            } catch (Throwable e) {
                                logger.error("Can not execute operation [{}]", name, e);
                            }

                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                        if (Thread.currentThread().isInterrupted()) return;

                    }
                }
            });

            thread.setName("Operation executor [" + name + "] " + i);
            thread.start();
        }
    }

    @Override
    public void enqueue(Operation operation) {
        queue.add(operation);
    }

    @Override
    public int size() {
        return queue.size();
    }

    @Override
    public boolean isEmpty() {
        return queue.isEmpty();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy