Java 如何强制ExecutorService立即运行?

Java 如何强制ExecutorService立即运行?,java,threadpool,java-threads,Java,Threadpool,Java Threads,我有一个ExecutorService,我想立即运行messageConsumer线程。当我在下面的代码中运行时,它会记录“提交完成”,但在大约4-5分钟后,messageConsumer线程启动 我想强制这个线程立即运行 BlockingQueue<Runnable> threadPoolQueue = new LinkedBlockingQueue<>(); ThreadPoolExecutor executorService = new ThreadPoolExec

我有一个ExecutorService,我想立即运行messageConsumer线程。当我在下面的代码中运行时,它会记录“提交完成”,但在大约4-5分钟后,messageConsumer线程启动

我想强制这个线程立即运行

BlockingQueue<Runnable> threadPoolQueue = new LinkedBlockingQueue<>();
ThreadPoolExecutor executorService = new ThreadPoolExecutor(50, 50, 30000, TimeUnit.MILLISECONDS, threadPoolQueue, new CustomThreadFactory("consumers"));
executorService.allowCoreThreadTimeOut(true);

MessageConsumer messageConsumer = new MessageConsumer(chargingService, messageSender);
executorService.submit(messageConsumer);
logger.debug("submit completed.");
编辑:顺便说一下,我正在使用java 7

public class CustomThreadFactory implements ThreadFactory {

 private static final AtomicInteger poolNumber = new AtomicInteger(1);
 private final ThreadGroup group;
 private final AtomicInteger threadNumber = new AtomicInteger(1);
 private final String namePrefix;

 public CustomThreadFactory(String groupName) {
    SecurityManager s = System.getSecurityManager();
    group = (s != null) ? s.getThreadGroup()
            : Thread.currentThread().getThreadGroup();
    namePrefix = groupName + "-thread";
 }

 @Override
 public Thread newThread(Runnable r) {
    Thread t = new Thread(group, r, namePrefix + "-" + threadNumber.getAndIncrement(), 0);
    if (t.isDaemon()) {
        t.setDaemon(false);
    }
    if (t.getPriority() != Thread.NORM_PRIORITY) {
        t.setPriority(Thread.NORM_PRIORITY);
    }
    return t;
 }
}

@NicolasFilotto是的,这一定是ThreadPoolExecutor我的错,我更新了我的代码。你可以强制poolcorethread以。。。你试过了吗?@Fildor我用的是java 7,ThreadPoolExecutor没有像preStartCoreThread这样的方法。java 7中有这个函数,MessageConsumer的运行实际上有一个无限循环吗?如果它应该无限运行,它应该有。(无限的意思是“必须显式关闭”)@NicolasFilotto是的,这一定是ThreadPoolExecutor我的错,我更新了我的代码。你可以强制poolcorethread以。。。你试过了吗?@Fildor我用的是java 7,ThreadPoolExecutor没有像preStartCoreThread这样的方法。java 7中有这个函数,MessageConsumer的运行实际上有一个无限循环吗?如果它应该无限运行,它应该有。(在“必须明确关闭”的意义上是无限的)
public class CustomThreadFactory implements ThreadFactory {

 private static final AtomicInteger poolNumber = new AtomicInteger(1);
 private final ThreadGroup group;
 private final AtomicInteger threadNumber = new AtomicInteger(1);
 private final String namePrefix;

 public CustomThreadFactory(String groupName) {
    SecurityManager s = System.getSecurityManager();
    group = (s != null) ? s.getThreadGroup()
            : Thread.currentThread().getThreadGroup();
    namePrefix = groupName + "-thread";
 }

 @Override
 public Thread newThread(Runnable r) {
    Thread t = new Thread(group, r, namePrefix + "-" + threadNumber.getAndIncrement(), 0);
    if (t.isDaemon()) {
        t.setDaemon(false);
    }
    if (t.getPriority() != Thread.NORM_PRIORITY) {
        t.setPriority(Thread.NORM_PRIORITY);
    }
    return t;
 }
}