Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Thread.Join()方法未等待线程完成_Java_Multithreading - Fatal编程技术网

Java Thread.Join()方法未等待线程完成

Java Thread.Join()方法未等待线程完成,java,multithreading,Java,Multithreading,我有这段代码:CustomerClient基本上是一个扩展线程的类。 我正在尝试生成多个线程,但一次只能生成一个线程。但是,我得到一个非法的线程状态异常。我做错了什么 CustomerClient cusClient = new CustomerClient("B", server_IP_1, server_Port_1, server_IP_2, server_Port_2); while (true) { System.out.println

我有这段代码:CustomerClient基本上是一个扩展线程的类。 我正在尝试生成多个线程,但一次只能生成一个线程。但是,我得到一个非法的线程状态异常。我做错了什么

CustomerClient cusClient = new CustomerClient("B", server_IP_1,
            server_Port_1, server_IP_2, server_Port_2);

    while (true) {
        System.out.println("new thread A");
        cusClient.start();
        cusClient.join();
    }

一个线程只能启动一次。所以每次在循环中都需要初始化线程对象

while (true) {
    CustomerClient cusClient = new CustomerClient("B", server_IP_1,
        server_Port_1, server_IP_2, server_Port_2);
    System.out.println("new thread A");
    cusClient.start();
    cusClient.join();
}

请分享完整的例外情况您根本没有创建新线程(除了一次)。在现有线程上重复调用
start()
。不相关的建议:您几乎不应该有一个类扩展线程,而应该实现Runnable。在这种情况下,您将创建一个新的Runnable,将其放入一个新线程,并在while循环中启动该线程。@Gray:他在问题的开头声明CustomerClient扩展了线程。您是否添加了与业务逻辑同步的内容???@Gray在无限循环中启动同一线程将给出例外直到,这很奇怪。以这样的串行形式调用
start()
然后调用
join()
,本质上与根本不使用任何线程是一样的。@JasonC:是的,这听起来像是一个经典。