线程自动更改名称

时间:2014-03-28 14:31:54

标签: java multithreading

我希望每次客户端连接到我的服务器时都创建一个新线程。 我有一个名为'clients'的计数器,每当有人连接时它会递增。 所以我希望处理客户端的线程被命名为C +客户端号码。例如C2或C4。 我现在有这个:

Thread C =new Thread()

它不会让我替换它:

Thread ("C" + clients) =new Thread()

它说左手边需要变化。 我也尝试过:

String threadName = "C" + clients;
Thread threadName =new Thread()

但是我收到消息“复制本地变量threadName。

那么我如何为循环中的线程创建一个新名称呢? 感谢

3 个答案:

答案 0 :(得分:2)

您的计数需要线程安全,因此请使用AtomicInteger:

 AtomicInteger numClients = new AtomicInteger(0);

对于您的主要问题,您似乎会混淆变量声明变量赋值对象构造,因为您的代码非常混乱。尝试:

 Thread thread = new Thread("C "+numClients.getAndIncrement());

请阅读上面列出的三件事情,这有助于您理解。

答案 1 :(得分:2)

我建议使用Executor来简化线程管理。

从简单的newCachedThreadPool()开始,并在代码中为您提供一个自动递增变量ThreadFactory

ThreadFactory factory = new ThreadFactory(){
    AtomicInteger counter = new AtomicInteger(0);
    public Thread newThread(Runnable runnable){
        Thread thread = new Thread(runnable);
        thread.setName("C "+counter.getAndIncrement());
        return thread;
    }
};
Executor executor = Executors.newCachedThreadPool(factory);

答案 2 :(得分:0)

首先,我建议你在开始进入线程之前先阅读一些编程基础知识。有两个名称相同的变量对你来说应该是一个明显的禁忌。

至于你的线程命名代码,就这样做 -

Thread thread = new Thread(C++ + "");

请注意,这仅适用于产生线程的任何内容不是并发的情况。如果是,您需要使用Atmoics