相关疑难解决方法(0)

如何为可调用线程命名?

我正在使用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)

请给我一些想法给这个帖子命名?

java multithreading executorservice java.util.concurrent

35
推荐指数
5
解决办法
7万
查看次数

如何在Java中命名线程池的线程

我有一个使用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允许我这样做.

提前致谢.

java multithreading executorservice threadpool

33
推荐指数
3
解决办法
3万
查看次数

如何在不使用InheritableThreadLocal的情况下为每个顶级进程/线程创建共享上下文?

我想看看是否有一个很好的模式,可以在不使用顶级线程的所有类和子线程的情况下共享上下文InheritableThreadLocal.

我有几个顶级进程,每个进程都在自己的线程中运行.这些顶级进程通常会产生临时子线程.

我希望每个顶级流程都拥有并管理自己的数据库连接.

希望绕过从类类数据库连接,并从线程的子线程(我的同事这个所谓的"社区自行车"模式).这些是大型顶级进程,这意味着可能会编辑数百个方法签名来传递此数据库连接.

现在我调用单例来获取数据库连接管理器.单例使用,InheritableThreadLocal以便每个顶级进程都有自己的版本.虽然我知道有些人对单身人士有问题,但这意味着DBConnector.getDBConnection(args)只要我需要正确管理的连接,我就可以说(换句话说).如果我能找到一个更好但仍然干净的解决方案,我不会依赖这种方法.

由于各种原因InheritableThreadLocal被证明是棘手的.(见这个问题.)

有没有人有一个建议来处理这种不需要或者InheritableThreadLocal遍布某个上下文对象的东西?

谢谢你的帮助!


更新:我设法解决了眼前的问题(请参阅相关问题),但我仍然希望了解其他可能的方法.下面的四十二个建议是好的,并且确实有效(谢谢!),但请参阅评论为什么它有问题.如果人们投票支持jtahlborn的答案并告诉我,我因为想要避免绕过我的数据库连接而迷恋,那么我会松懈,选择那个作为我的答案,并修改我的世界观.

java multithreading

7
推荐指数
1
解决办法
1762
查看次数

ThreadPoolExecutor不执行所有任务

我有一个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)

java multithreading

5
推荐指数
1
解决办法
5405
查看次数

从ThreadPoolExecutor获取运行和排队的任务?

我需要向用户显示所有正在运行的任务.每个任务都与特定的ID相关联.要执行任务,我使用a ThreadPoolExecutor.每个线程都与id具有相同的名称.所以我只需要获取所有正在运行的队列和等待队列线程的列表.然后找到名称并显示它们.

我怎样才能做到这一点?

java concurrency

2
推荐指数
1
解决办法
2378
查看次数