我希望每次客户端连接到我的服务器时都创建一个新线程。 我有一个名为'clients'的计数器,每当有人连接时它会递增。 所以我希望处理客户端的线程被命名为C +客户端号码。例如C2或C4。 我现在有这个:
Thread C =new Thread()
它不会让我替换它:
Thread ("C" + clients) =new Thread()
它说左手边需要变化。 我也尝试过:
String threadName = "C" + clients;
Thread threadName =new Thread()
但是我收到消息“复制本地变量threadName。
那么我如何为循环中的线程创建一个新名称呢? 感谢
答案 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