如果这个问题听起来很愚蠢,请原谅我——我才刚刚开始使用 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/