对Java ThreadPool的困惑

2023-12-11

这是我第一次在我的新项目中使用Java线程池,在我遇到这个之后 关联http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html,我对此更加困惑,这是页面上的代码,

package com.journaldev.threadpool;

public class WorkerThread implements Runnable {

    private String command;

    public WorkerThread(String s){
        this.command=s;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+' Start. Command = '+command);
        processCommand();
        System.out.println(Thread.currentThread().getName()+' End.');
    }

    private void processCommand() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public String toString(){
        return this.command;
    }
}


package com.journaldev.threadpool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SimpleThreadPool {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            Runnable worker = new WorkerThread('' + i);
            executor.execute(worker);
          }
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        System.out.println('Finished all threads');
    }

}

在代码中,创建了一个固定大小的池并创建了 10 个工作线程,对吗?

线程池本来应该减轻系统的负担,相反,在上面的代码中,我认为除了工作线程之外还创建线程池,这增加了负担。为什么要费劲去使用线程池呢?

谁能解释一下吗? 谢谢

我还在 StackOverflow 上读过这篇文章http://stackoverflow.com/questions/19765904/how-threadpool-re-use-threads-and-how-it-works它也没有帮助我。


这很令人困惑,因为 Runnable 被命名为 WorkerThread,但它们不扩展 java.lang.Thread,它们只是实现 Runnable 的对象。实现 Runnable 允许您指定需要执行的任务,而无需实例化实际的 Thread 对象。在您的示例中创建的唯一线程是主线程和执行器创建的线程。

请注意,即使您更改此代码以使 WorkerThread 扩展 Thread,只要代码不调用它们的 start 就不会导致更多线程实际运行。构造线程对象涉及一些事情,例如检查安全管理器和初始化线程局部变量,但它实际上并没有在操作系统级别执行任何操作来分配线程。就 Executor 而言,它们只是 Runnables,它将使用线程池的线程来执行它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对Java ThreadPool的困惑 的相关文章

  • 如何使用 Jsoup 获取包含非 ASCII 字符(ą、ś ...)的 URL?

    我正在使用 jsoup 解析一些波兰网站 但我对 URL 中的 等特殊字符有问题example com k t读起来像example com k 每个没有这个特殊字符的查询都可以完美运行 我努力了Document doc Jsoup par
  • 为什么锁可以确保底层监视器被释放而直接使用监视器却不能?

    msdn 文章线程同步 C 编程指南 http msdn microsoft com en us library ms173179 28v vs 90 29 aspx规定 lock x DoSomething 相当于 System Obje
  • 有没有一种干净的方法将泛型类型的类分配给变量?

    鉴于此代码 List
  • Android 服务 START_STICKY START_NOT_STICKY

    我需要让我的服务始终在后台运行 并使用 startService 函数启动我的服务 无论应用程序的状态如何 我都不想重新启动服务 这是我的观察 START STICKY gt 如果应用程序启动 则服务正在重新启动 当应用程序关闭时 服务也会
  • java中的散列是如何工作的?

    我正在尝试弄清楚java中的哈希值 例如 如果我想在哈希图中存储一些数据 它是否会有某种带有哈希值的底层哈希表 或者 如果有人能够对哈希的工作原理给出一个很好且简单的解释 我将非常感激 HashMap 基本上在内部实现为数组Entry 如果
  • Netbeans 雷达插件配置

    我使用的是 Netbeans 8 0 1 在提交到 SVN 之前 我需要从 IDE 运行并检查 SonarQube 分析 我已经安装了 Netbeans Radar 插件 用于启动本地分析并检查结果 这个插件有一个名为 Get Issues
  • 如何增加使用 SAX 解析 XML 文件的entityExpansionLimit

    我正在尝试使用 Java 中的 SAX 解析器解析一个 1 23 GB 的 XML 文件 我使用的是 Mac 操作系统和 JDK 1 7 0 51 不幸的是 我收到以下错误 The pasrser has encountered more
  • 如何在休眠中持久保存实体期间验证实体的约束

    我有一个带有字段名称的实体 我希望它不超过255 所以我这样定义它 Entity public class A implements Serializable NotNull Size max 255 private String name
  • 在 Selenium Grid 中注册 PhantomJS 节点时出错

    我有以下问题 我成功启动了 Selenium Grid hub java jar selenium server standalone 2 53 0 jar role hub 之后我尝试使用以下命令启动 PhantomJS 节点 phant
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • 使用 JPA 标准的“不在”约束

    我正在尝试写一个NOT IN约束使用JPA Criteria 我尝试过这样的事情 builder not builder in root get property1 虽然我知道这行不通 在上面的语法中 如何添加集合 列表property1会
  • Apache Camel - 路由中的事务

    我有一个关于 Apache Camel 的一般性问题 我无法找到聚合器是否已进行交易 如果是交易 交易是如何实现的 聚合的速度有多快 将消息发送到聚合器可以在事务中运行 您需要一个带有聚合器的持久存储来让传出消息充当事务 请参阅有关持久性的
  • GSSAPI 中的 javax.naming.AuthenticationException

    我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定 我收到此错误 javax naming AuthenticationException GSSAPI 根异常是 javax security sasl SaslException
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • 将 JPanel 添加到 JFrame

    我有一个程序 其中将 JPanel 添加到 JFrame public class Test Test2 test new Test2 JFrame frame new JFrame Test frame setLayout new Bor
  • 避免加密和编码的 URL 字符串中的换行符

    我正在尝试实现一个简单的字符串编码器来混淆 URL 字符串的某些部分 以防止它们被用户弄乱 我使用的代码几乎与示例中的相同JCA指南 http docs oracle com javase 6 docs technotes guides s
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • Java:易失性足以使类线程安全?

    我有一个关于 Java 中 volatile 语句的问题 请看这个构造的例子 class Master Foo is a class with thread safe methods public volatile Foo foo clas
  • 确保 MAVEN_HOME 设置正确

    这里是 Java 和 Maven 菜鸟 使用 OSX 10 8 并使用 HomeBrew 安装 Maven 1 如果我说which mvn我会得到这个 usr local bin mvn 2 如果我说echo MAVEN HOME我不会得到
  • Cassandra 会话与集群 有什么可分享的?

    考虑 Cassandra 的 Session 和 Cluster 类 Java 驱动程序 我想知道有什么区别 在 Hibernate 中 每次都会创建一个会话并共享会话工厂 从许多来源我了解到 它被认为是创建一个会话并在多个线程之间共享它

随机推荐

  • C - 通过已知大小的引用多维数组传递

    主要内容 char myData 500 9 dynamic rows char tableData 500 NULL dynamic rows int r newCallBack db myData tableData r 并通过以下方式
  • [0-9]+)/$']' aria-label='与“编辑”相反,没有找到任何参数。尝试了 1 个模式:['articles/edit/(?P[0-9]+)/$']'> 与“编辑”相反,没有找到任何参数。尝试了 1 个模式:['articles/edit/(?P[0-9]+)/$']

    我是 Django 的初学者 现在正在开发一个博客应用程序 在文章编辑部分我被卡住了 我不知道为什么它显示这个错误 搜索了很多却找不到答案 NoReverseMatch at articles edit 2 Reverse for edit
  • Matlab:我在 3D 图中有两个点,我想用一条线将它们连接起来

    我有一个 3D 图和两个点坐标 A 0 0 0 和 B 13 11 19 我只想绘制一条连接这两点的可见线 我尝试了plot3 0 0 0 13 11 19 和其他东西 但我尝试的一切都惨败了 就是这样 Your two points P1
  • JQuery UI DatePicker 使用 2 个日期字段尝试获取日期差异

    我有 2 个 JQuery 日期字段 Arrival 离开 到达日期不能是今天的日期 我在 javascript 中使用 minDate 1 进行了排序 出发日期必须至少早于抵达日期 2 天 我认为 minDate 3 可以工作 但那是查询
  • 如何从文件中读取一行?

    我必须读取一个 txt 文件 其行格式如下 1 G 2 F 3 2 G 2 F 3 3 F 4 G 5 4 F 4 G 5 5 F 6 c w 6 p f G 7 7 G 7 G 7 w c w c w 每行都会向一个结构体提供其数据 其中
  • 带有粘合字符串数组的内爆数组

    我有一个尴尬的需求 但我需要在结果爆炸之前将一个数组与另一个数组交错 我想我更好的选择是少说多举例 数组一号 0 gt John has a 1 gt and a 2 gt 数组二号 0 gt Slingshot 1 gt Potato 我
  • 多线程或多进程 Matplotlib plt.plot() 函数?

    我目前正在 Python 中使用 matplotlib 使用 for 循环将数据绘制到图形中 该循环循环遍历数据集并每次获取新的 x 和 y 然后使用plt plot x y 绘制 x 和 y 数据 然后将绘图添加到当前图形 我最终得到了多
  • 在 F# 交互中获取调试器上下文

    是否有可能以某种方式在 F 交互中获取调试器上下文 例如 如果我在 C 项目中遇到断点 那么我想在 F 交互中使用局部变量 就像在即时窗口中使用它们一样 有什么办法可以做到吗 或者我是否需要为此创建一个调试器可视化工具 两者都不 您需要为其
  • 堆叠条形图标签 - D3

    我正在尝试将数据标签添加到 d3 中的堆积条形图 我希望数据标签位于栏的中间 到目前为止 我刚刚弄清楚如何在每个栏的顶部添加数据标签 但实际上我希望这些标签位于每个条形的中间 这是我的代码 var width 750 height 500
  • Oracle 11G EM 无法在 Windows 7 上运行

    我已在 Windows 7 Ultimate 64 位计算机上安装了 Oracle 11G Release 2 但无法运行它们 当我登录时 它会生成错误 已发生内部错误 请检查日志文件以获取详细信息 我观察到以下情况 Service ORA
  • scipy.optimize.curve_fit 无法拟合移位的倾斜高斯曲线

    我正在尝试使用 scipy 拟合一条倾斜且移位的高斯曲线曲线拟合函数 但我发现在某些条件下拟合效果很差 经常给我接近或完全是一条直线 下面的代码源自curve fit文档 提供的代码是用于测试目的的任意数据集 但很好地显示了问题 impor
  • 使用 GAE 将对象保存到数据存储中。当取回它时,该对象有空成员

    我正在尝试通过 GAE 学习 Go 我创建了 2 个处理程序 一个用于将对象保存到数据存储 另一个用于检索对象并将其输出到屏幕 问题是 当我从数据存储中检索 UserAccount 对象时 该对象内的每个值都消失了 任何帮助将不胜感激 Ou
  • 如何使用 xslt 删除所有属性值中的空格?

    我想使用 xslt 从 xml 中的所有属性中删除空格 我用了strip space 但这会删除节点中的空格 我的输入xml是
  • java 将字符串连接成 StringBuilder

    我有一个遗留的Java文件 它使用字符串连接来构建巨大的字符串对象 这是一个严重的性能问题 是否有一种方法可以执行以下操作 String test I am a very bad programmer to use concatenatio
  • PHP 到 Ruby 编译器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有谁知道 最好是开源的 PHP 到 ruby 编译器 即解析 PHP 代码并生成语义上等效的 ruby 代码的程序 我自己没用过 但你可能想看看Ph
  • 如何使用 awk 显示列中的文件名?

    我正在尝试执行一个添加到我的文件的命令 当前输入文件的名称 逗号数小于 5 的行索引 跨行的逗号数 I got awk F if NF gt 5 printf Filename d Index d Number of commas d n
  • VSS到SVN的迁移;工具建议? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 有人对将代码库从 VSS
  • 我可以在浏览器中查看 httpOnly cookie

    我认为 httpOnly cookie 只能在 http 请求中读取 但是 当我打开 Firefox 开发工具时 我可以看到 cookie 的值 这是正常的吗 是的 这很正常 HttpOnly 的作用是阻止 cookie 被访问JavaSc
  • Oracle分页策略

    我想从两个时间戳之间的表中获取数百万行 然后对其进行处理 触发单个查询并立即检索所有记录看起来是一个糟糕的策略 因为它可能超出我的 JVM 程序的内存容量 我读过这篇文章 http oracle readthedocs io en late
  • 对Java ThreadPool的困惑

    这是我第一次在我的新项目中使用Java线程池 在我遇到这个之后 关联http www javacodegeeks com 2013 01 java thread pool example using executors and thread