我读过一个客户端-服务器应用程序,客户端通过服务器进行交互。因此,为此目的,我想在不同的线程上创建客户端。 (如果没有,它们通常会被 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)。我无法解释为什么。
我认为我遇到的问题是:我不在同一个类中创建多个线程,而是多次运行该类。虽然我认为这会产生奇怪的问题,但仍然无法解释为什么。
请为我解释一下以及如何纠正这个问题。
谢谢:)
最佳答案
可能是因为您每次运行一个线程,结束后再次运行 main()
方法,这会创建另一个具有相同 id 的线程。 id 的相似性是预期的,根据 getID()
方法中的文档,该方法表示“当线程终止时,可以重用此线程 ID。” Read here了解更多。
关于java - 让同一台机器上的客户端运行在不同的线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16104170/