我已阅读客户端 - 服务器应用程序,客户端通过服务器进行交互。所以,为此,我想在不同的线程上创建客户端。 (如果不是,它们经常被IO阻止)。
这是我的客户代码:
public class Client {
//some client code here
public static void main(String[] args) {
new Thread() {
@Override
public void run() {
long threadId = Thread.currentThread().getId();
System.out.println("Client creator thread id: " + threadId);
Client c = new Client();
// some code to run client
}
}.start();
}
}
我多次运行此类文件(直接在IDE中运行,或创建bat文件)。我注意到它们都在同一个线程上(相同的线程ID)。我无法解释原因。
我认为我遇到的问题是:我不在同一个类中创建多个线程,但是运行这个类倍增次数。虽然我觉得这个问题很奇怪,但还是无法解释原因。
请为我解释一下如何解决这个问题。
谢谢:)
答案 0 :(得分:1)
可能是因为您每次都运行一个线程,并且在它结束后再次运行main()
方法,这会创建另一个具有相同ID的线程。 id中的相似性是根据getID()
方法中的文档预期的,其中“当线程终止时,可以重用此线程ID。” Read here以获取更多信息。
答案 1 :(得分:1)
如果你在这样的for循环中产生线程:
public class Client {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread() {
@Override
public void run() {
long threadId = Thread.currentThread().getId();
System.out.println("Client creator thread id: " + threadId);
Client c = new Client();
// some code to run client
}
}.start();
}
}
}
您会在一个进程中找到许多具有不同ID的线程。如果你只是继续运行main(),那么你只需创建另一个只包含一个线程的进程。
答案 2 :(得分:0)
如果您真的想测试/模拟多个客户端,那么您应该启动多个进程。所以你也不必乱用创建线程。实际上,客户端永远不会在同一个进程中运行(即使不在同一台机器上运行?)。 这不会让你理解这件事,但我会让你更接近现实。