【发布时间】:2017-02-25 23:53:29
【问题描述】:
我有 TCP 客户端/服务器。客户端正在运行两个线程 C1 和 C2。并且服务器正在运行三个线程 S1、S2 和 S3 线程。 C2 应该在服务器完成 S3 后收到结果。我在最后一步有问题。客户端和服务器看起来像这样。请提出建议。
Public class client {
public static void main (String[] args)
{
ClientThread c1= new ClientThread(); // send task to server
ClientThread c2= new ClientThread(); // result receive
c1.start();
c1.join();
c2.start();
c2.join();
}
}
服务器如下所示:
Public class server {
public static void main (String[] args)
{
ServerThread s1= new ServerThread(); // receive from client
ServerThread s2= new serverThread(); // calculate
ServerThread s3= new serverThread(); // send to client
s1.start();
s1.join();
s2.start();
s2.join();
s3.start();
s3.join();
}
}
输出的顺序应该是这样的:
c1 sends task
s1 receives task
s2 calculates
s3 sends result to client
c2 receives final result
【问题讨论】:
-
为什么?所有服务器线程都按顺序运行,因此它们根本不需要是线程。您的问题是您有 start/join/start/join,这没有任何意义: start 后跟 join 根本不是多线程,它是顺序执行。它应该是开始/开始/加入/加入。
-
我在服务器和客户端都像开始/开始/加入/加入一样发生了变化。然而,C2 仍然在 S3 之前开始(即在套接字上读取)(即在套接字中写入结果)。如何保证S3写完结果后C2才开始接收结果?
标签: java multithreading sockets java-threads