我正在使用ExecutorService线程池执行可调用对象.我想给这个帖子命名.
更具体地说,在旧版本中,我这样做了 -
Thread thread = new Thread(runnable Task);
thread.setName("My Thread Name");
Run Code Online (Sandbox Code Playgroud)
我在log4j日志记录中使用线程名称,这在故障排除时有很大帮助.现在我将我的代码从Java 1.4迁移到Java 1.6.我写了这个(在下面给出) - 但我不知道如何给这个帖子命名.
private final ExecutorService executorPool = Executors.newCachedThreadPool();
Future<String> result = executorPool.submit(callable Task);
Run Code Online (Sandbox Code Playgroud)
请给我一些想法给这个帖子命名?
我有一个使用Executor框架的Java应用程序,我有这样的代码
protected ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(5)
我的理解是,JVM内部将创建一个包含5个线程的池.现在,当我在一个分析器中检查执行时,我会得到类似的东西thread-pool2,thread-pool3等等.
Some of these thread pools are created by the server and some are created by me,我需要一种方法来区分由我创建的和由服务器创建的.
我想如果我可以命名线程池它应该做的伎俩,但是没有看到任何API允许我这样做.
提前致谢.
我想看看是否有一个很好的模式,可以在不使用顶级线程的所有类和子线程的情况下共享上下文InheritableThreadLocal.
我有几个顶级进程,每个进程都在自己的线程中运行.这些顶级进程通常会产生临时子线程.
我希望每个顶级流程都拥有并管理自己的数据库连接.
我不希望绕过从类类数据库连接,并从线程的子线程(我的同事这个所谓的"社区自行车"模式).这些是大型顶级进程,这意味着可能会编辑数百个方法签名来传递此数据库连接.
现在我调用单例来获取数据库连接管理器.单例使用,InheritableThreadLocal以便每个顶级进程都有自己的版本.虽然我知道有些人对单身人士有问题,但这意味着DBConnector.getDBConnection(args)只要我需要正确管理的连接,我就可以说(换句话说).如果我能找到一个更好但仍然干净的解决方案,我不会依赖这种方法.
由于各种原因InheritableThreadLocal被证明是棘手的.(见这个问题.)
有没有人有一个建议来处理这种不需要或者InheritableThreadLocal遍布某个上下文对象的东西?
谢谢你的帮助!
更新:我设法解决了眼前的问题(请参阅相关问题),但我仍然希望了解其他可能的方法.下面的四十二个建议是好的,并且确实有效(谢谢!),但请参阅评论为什么它有问题.如果人们投票支持jtahlborn的答案并告诉我,我因为想要避免绕过我的数据库连接而迷恋,那么我会松懈,选择那个作为我的答案,并修改我的世界观.
我有一个ThreadPoolExecutor- corePoolSize = 5,maxPoolSize = 10 queueSize = 10,keepAlive = 1000秒。我正在执行100 Runnable任务。实际执行的任务数量各不相同,并非全部执行。RejectionHandler也没有任何报告。我相信我对ThreadPoolExecutor的理解是错误的。有谁能够帮助我?如何执行所有任务?
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TestThreadPoolExecutor {
public static void main(String[] args) {
ThreadFactory threadFactory = Executors.defaultThreadFactory();
ArrayBlockingQueue<Runnable> arrayBlockingQueue = new ArrayBlockingQueue<Runnable>(10);
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10,1000, TimeUnit.SECONDS, arrayBlockingQueue, threadFactory, new RejectedExecutionHandlerImpl());
MonitorThread monitor = new MonitorThread(threadPoolExecutor, 3);
Thread monitorThread = new Thread(monitor);
monitorThread.start();
for (int i = 0; i < 100; i++) {
threadPoolExecutor.execute(new …Run Code Online (Sandbox Code Playgroud) 我需要向用户显示所有正在运行的任务.每个任务都与特定的ID相关联.要执行任务,我使用a ThreadPoolExecutor.每个线程都与id具有相同的名称.所以我只需要获取所有正在运行的队列和等待队列线程的列表.然后找到名称并显示它们.
我怎样才能做到这一点?