Java 执行器相对于新线程的优势

Java 执行器相对于新线程的优势,java,multithreading,threadpool,executorservice,Java,Multithreading,Threadpool,Executorservice,在Java程序中,仅在线程上使用执行器有什么好处 比如 ExecutorService pool = Executors.newFixedThreadPool(2); void someMethod() { //Thread new Thread(new SomeRunnable()).start(); //vs //Executor pool.execute(new SomeRunnable()); } 执行器是否只限制允许同时运行的线程数(线程池

在Java程序中,仅在线程上使用执行器有什么好处

比如

ExecutorService pool = Executors.newFixedThreadPool(2);
void someMethod() {
    //Thread
    new Thread(new SomeRunnable()).start();

    //vs

    //Executor
    pool.execute(new SomeRunnable());
}

执行器是否只限制允许同时运行的线程数(线程池)?它实际上是否将可运行文件多路传输到它创建的线程上?如果不是,这只是一种避免每次都必须编写新线程(runnable).start()的方法吗?

是的,执行者通常会将runnable多路复用到他们创建的线程上;它们将约束和管理一次运行的线程数量;它们将使定制并发级别变得更加容易。一般来说,执行器应该比仅仅创建裸线程更受欢迎。

创建新线程的成本很高。因为执行器使用线程池,所以可以轻松地重用线程,从而获得更好的性能

执行器是否只限制允许同时运行的线程数(线程池)

,这样做,每一个都用不同的术语(阅读适当的javadoc以了解更多信息)

它实际上是否将可运行文件多路传输到它创建的线程上

如果不是,这只是一种避免每次都必须编写新线程(runnable).start()的方法吗

ExecutorService
帮助您控制处理线程的方式。当然,您可以手动执行此操作,但无需重新发明轮子。另外,
ExecutorService
还提供了其他功能,比如通过使用实例执行异步任务。

正如我在中所说,线程非常糟糕。执行器(以及相关的并发类)非常好:

警告:在这里,我强烈反对使用原始线程。我 更喜欢使用Callables和FutureTasks(来自javadoc:“A 可取消异步计算”)。超时的整合, 现代并发的适当取消和线程池 支持对我来说比成堆的原始线程有用得多

例如,我目前正在用一个自拍器替换一段旧式代码,该代码使用一个在循环中运行的不相交线程来确定每次迭代后线程.sleep()应该运行多长时间。我的替代者将使用一个非常简单的Runnable(用于保存单个迭代)、一个Runnable来运行其中一个迭代,并使用该方法产生的结果来调整迭代之间的时间


虽然您可能会争辩说,替换将有效地等同于遗留代码,但我将用一组将GUI(我们当前正在运行吗?)的关注点与数据处理(以5倍的速度播放)和文件管理分离开来的功能来替换一个神秘的线程管理和一厢情愿的想法(取消此运行并选择其他文件)。

有多个与线程相关的问题

  • 管理线程
  • 资源利用
  • 线程的创建
Executors为创建线程池提供了不同类型的实现。此外,线程创建是一项成本高昂的工作。Executors在内部创建和管理这些线程。有关详细信息,请参见下面的链接。

您是否阅读了大量详细的文档?…在大型应用程序中,将线程管理和创建与应用程序的其余部分分开是有意义的。封装这些函数的对象称为执行器。“-还没有人回答“测试”-这更简单(更快)使用ExecutorService的存根实现进行测试,该实现只在当前线程中的可运行线程上调用run()。其他注意事项包括:注入、容器管理、可配置和监控。请注意,有太多不同的
ExecutorService
实现可供您使用。谢谢。这是一个很好的快速回答。多路复用对我来说很好,线程限制器只是锦上添花。以下是一些关于费用的信息。这将有助于一个judge使用
Thread
s重构现有设计是否会带来真正更好的性能,或者只是浪费时间。