java - java中的Executor服务-->如何将单线程代码转换为使用executor

标签 java multithreading threadpool executorservice

如果这个问题听起来很愚蠢,请原谅我——我才刚刚开始使用 Executor。

我有一个以这种方式使用线程的现有 Java 应用程序——基本上使用独立线程——

private Thread spawnThread( )
    {

        Thread t = new Thread()
        {
            String taskSnap = task.toString();
            public void run()
            {
                try
                {
                    println( task.run( null ) );
                }catch( InterruptedException e )
                {
                    println( "ITC - " + taskSnap + " interrupted " );
                }
            }
        };
        return t;
    }

从上面可以看出,该函数返回一个新线程。

现在在程序的main()函数中,通过这种方式创建了一个新的线程--

    taskThread = spawnThread();

    taskThread.start();

我想做的是,创建一个执行器服务(具有固定数量的线程)--> 然后将新线程的创建/任务的执行交给该执行器。

由于我是 Executor 的新手,我想知道的是,我如何更改上面的代码,而不是形成一个新的单独线程,而是在线程池中创建一个新线程。我看不到任何创建线程的命令(在线程池中)--> 将上述任务移交给该线程(而不是如上所述的独立线程)。

请让我知道如何解决这个问题。

最佳答案

在你的 main 中,你可以这样写:

ExecutorService executor = Executors.newFixedThreadPool(nThreads);
executor.submit(new Runnable() {
    String taskSnap = task.toString();
    public void run() {
            try {
                println(task.run(null));
            } catch( InterruptedException e) {
                println("ITC - " + taskSnap + " interrupted ");
            }
    }
});

submit 方法将在执行程序服务中的线程之一上执行 Runnable。

注意:不要忘记在不再需要执行器服务时关闭它,否则它会阻止您的程序退出。

关于java - java中的Executor服务-->如何将单线程代码转换为使用executor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14918706/

相关文章:

multithreading - zmq : can multiple threads PUSH in a simple PUSH-PULL pattern

javascript - 如何在 Javascript 中锁定线程?

java - 如何根据窗口调整 jlabel 的大小

java - 对齐 BaseLine 但避免 Android 布局中的循环依赖

java - 帮我实现一个可倒带的缓冲区

vb.net - WaitOne()函数的正确用法是什么

java - Java 中的有向图处理

java - Room - 模式导出目录未提供给注释处理器,因此我们无法导出模式

javascript - 在 Node.js 中并行化任务

启动新线程时.NET WPF MissingMethodException