问题标签 [managedthreadfactory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
20 回答
159521 浏览

java - ExecutorService 的线程和线程池命名

假设我有一个使用Executor框架的应用程序

当我在调试器中运行此应用程序时,会使用以下(默认)名称创建一个线程:Thread[pool-1-thread-1]. 如您所见,这并不是非常有用,据我所知,该Executor框架没有提供一种简单的方法来命名创建的线程或线程池。

那么,如何为线程/线程池提供名称呢?例如,Thread[FooPool-FooThread].

0 投票
1 回答
2070 浏览

java - 如何在 Glassfish V4.0 中创建 ManagedThreadFactory 实例

我从 Glassfish V4.0(build 89)容器中运行的 Java 代码内部调用 rabbitMQ 客户端(而不是服务器),以连接到另一台机器上的 rabbitmq 服务器。根据 rabbitmq 客户端文档,我们应该为 rabbitmq 连接提供一个 ManagedThreadFactory 实例来创建线程。

我尝试使用注入 DefaultManagedThreadFactory

ctx.lookup("java:comp/DefaultManagedThreadFactory")

那失败了

在 SerialContext 中查找“java:comp/DefaultManagedThreadFactory”失败...

尝试@Resource(lookup="concurrent/__DefaultManagedThreadFactory")会导致 NPE。

我对 java EE 并不感兴趣,我只是将这个容器用作我的球衣 Web 服务的前端。显然我需要做更多/不同的事情。但是,除了

https://blogs.oracle.com/arungupta/entry/create_managedexecutorservice_managedscheduledexecutorservice_managedthreadfactory_contextservice

http://javahowto.blogspot.in/2011/02/how-to-create-and-look-up-thread-pool.html

任何 Java EE 专家都可以告诉我正确的巫毒咒语来完成这项工作吗?

更新 1

更新 2

axel - 我的情况没有什么特别之处。我正在看的是在 GFV4 中尝试一个 rabbitmq java 客户端。所以重现问题

  • 你需要运行rabbitmq服务器
  • 使用客户端代码连接到rabbitmq服务器,客户端代码是部署在GF上的战争的一部分
  • 根据 rabbitmq 客户端 API 指南(https://www.rabbitmq.com/api-guide.html)@see自定义线程工厂部分。他们将线程实例化委托给容器。
  • rabbitmq java客户端代码在Github上

我可以从 GF 管理控制台看到 ManagedThreadFactory 名称,所以它应该在那里。

更新 3

托管线程工厂和托管执行器服务可以使用 JNDI 定位。但是,无法将相同的资源注入使用 Jersey Web 服务的代码中。资源注入与一个简单的 servlet 示例一起工作(例如 Github 上的 java EE7 示例)

这是由于球衣/Hk2/CDI/焊接等的相互作用吗?我正在寻找一个权威的答案来解释为什么我不能让资源注入工作?

0 投票
1 回答
537 浏览

jakarta-ee - “传统”线程无法在 WildFly 中查找 JNDI 名称

我正在将旧应用程序(不使用 bean 或依赖注入)从 Weblogic 迁移到 WildFly。在大多数情况下,它现在可以正常工作。但是,它也以“传统方式”(new Thread())创建线程,这些线程无法查找 JNDI 名称,这意味着它们无法使用数据库和邮件。

看来我需要使用托管线程工厂来创建线程。这样,新线程应该仍然能够看到容器中定义的 JNDI 名称。但是,我不确定如何从容器中检索这样的工厂。我能找到的所有示例都使用依赖注入,而应用程序的编写完全没有依赖注入。

那么,如何从自己创建的线程中访问 JNDI 名称呢?或者,如何检索可用于创建仍可看到容器及其 ​​JNDI 绑定的线程的托管线程工厂?

0 投票
1 回答
1817 浏览

java - 关机还是不关机?在 ExecutorService (Java8)

我试图了解执行程序服务相对于关机的行为。文档说除非有 shutdown() 调用,否则应用程序不会终止——但在这个简单的例子中。它精确地在一分钟后退出。任何想法?

返回:11:34:00.421:Thread-0:什么都不做构建成功(总时间:1 分 0 秒)

0 投票
2 回答
414 浏览

java - 如果我的 Java ThreadPoolTask​​Executor 被调用的次数超过“maxPoolSize”设置会怎样?

我将 Java 6 与 Spring 3.2.11.RELEASE 和 JBoss 7.1.3.Final 一起使用。我在我的 Spring 应用程序上下文文件中有这个

我的问题是,如果我在上述设置下调用 taskExecutor 的执行方法 300 次,那么当前 10 个线程排队时,其他 290 个线程会发生什么情况?它们会被丢弃还是只是一次执行 10 个线程?

0 投票
2 回答
5235 浏览

ruby - 如何在 Ruby on Rails(相当于 Java 线程工厂)中管理多个线程?

我正在使用 Ruby on Rails 5,尽管我是 Ruby/Rails 的新手。我已阅读有关使用创建线程的信息

但是,我想知道是否有一种标准方法可以在 Ruby/Rails 中管理一堆应用程序创建的线程。我熟悉Java,它有一个线程工厂。这允许一定数量的线程同时运行,而其他线程必须在队列中等待。我想知道如何在 Ruby/Rails 中做类似的事情。

请注意,我不是在谈论请求网页时自动生成的线程类型。我说的是我(应用程序所有者)创建的线程。

0 投票
1 回答
202 浏览

jakarta-ee - 如何在 Java-ee 中构建递归树?

这是我的伪代码:

由于 Java-ee 不支持 ForkJoinPool - 这是不可能的。那么我该如何使用 ManagedThreadFactory 和/或 ManagedExecutorService 呢?我真正的挑战是由于无法在 Java-ee 中调用 pool.shutdown() 或 pool.awaitTermination。所以,从来电者那里,如果我这样做:

然后我的方法不会等待所有 pool.submit(new Builder(childObj, pool)) ,因此我的对象没有设置所有内容并且不完整。我想将 pool.submit 返回的所有 Futures 放入阻塞队列中 - 但是我不知道如何通知调用者我的树遍历已完成。当树遍历完成时,我确实有一个计数器达到 0,但是由于客户端正在提交一个顶级节点,我不确定如何让它在 Java-ee 中等待而没有 while(isCounter = 0) - 这是一个 CPU 猪。

任何指针?

0 投票
3 回答
1048 浏览

java - 如何等待我的线程工厂完成其所有任务的执行?

我正在使用带有 Java 7 的 Spring 4.3.8.RELEASE。我想创建一个线程工厂来帮助管理我的应用程序中的某些工作人员。我这样声明我的线程工厂

但是,我在线程上“加入”时遇到了麻烦。也就是说,我想在继续执行某个任务之前等待所有工作完成,所以我有

我的线程池是这样执行的

然而打印出来的是

很明显,我没有在等。等待我的线程完成工作的正确方法是什么?

0 投票
1 回答
189 浏览

java - 根据 ThreadFactory 的可运行输入的实例类型为 ExecutorService ScheduledExecutorService 实现自定义命名

我有一个ExecutorServiceandScheduledExecutorService我正在使用 customThreadFactory以便我可以根据 Thread 工厂的输入类型命名每个线程以runnable创建线程,但输入runnableThreadFactory类型是ThreadPoolExecutor$Worker. 以下是我的ThreadFactory实现。如何runnable从线程创建 ExecutorService中获取实际信息?ScheduledExecutorService

AcquirerTransaction&IssuerTransaction实现Runnable

0 投票
1 回答
276 浏览

java - java Guava ThreadFactoryBuilder 为什么我们需要计数为 AtomicLong

最近我开始研究在线程池中创建新线程ThreadFactory使用哪个。ThreadPoolExecutor为了方便调试和监控,我们不希望线程池创建的线程是默认的0、1、2、3,而是取一个有意义的名字。

实现这一目标的一种方法是实现一个自定义ThreadLoad的,可以在创建线程时设置线程的名称。Guava有一个方便的自定义构建器类ThreadFactory,我希望从中学习。

理解这个类的大部分内容并不难,但我对方法count中的变量感到很困惑。doBuild

我还去了实际调用的ThreadPoolExecutor#Worker源代码newThread()ThreadFactory

但我仍然不清楚为什么我们需要一个原子变量。

当然,我可以猜测线程池中的线程可能是以多线程方式创建的,因此为了确保线程的 id 不会重复,我们需要 id-generator 是一个原子变量,但我没有直接证据这个假设呢。

任何人都可以对此有所了解吗?