我正在为聊天客户端 - 服务器应用程序编写一个测试,我创建了10个套接字 - 每个套接字都会向其他9个套接字发送消息,这会触发服务器通过ExecutorService创建10个线程并发送消息。它需要花费一些时间才能发送所有10 * 9 = 90条消息,但是如何验证所有10个线程都已完成此作业(线程没有终止它们继续运行)。我想知道是否有可能总量从套接字收到的行并等待那个条件,直到每个套接字到达9个收到的消息,如果不是我怎么办呢?另外我不应该修改客户端和聊天代码,但是我可以自由地在测试中写任何东西,这里是我如何创建10个套接字并将消息发送到服务器,该服务器是从课程开始的:
for (int i = 0; i < 10; i++) {
try {
Socket socket = new Socket("127.0.0.1", 3000);
allsockets.add(socket);
final PrintWriter stream = new PrintWriter(socket.getOutputStream(), true);
stream.println("someMessage");
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
这是一个非常专业的问题,但考虑到您提供的信息,使用Variant
变量可能是值得的。
volatile
使用关键字public static volatile int messagesReceived = 0;
意味着JVM使用lock
确保一次只有一个线程可以修改变量。
然后,每个套接字在完成工作后应该递增volatile
个变量。一旦messagesReceived
变量达到10,或者您产生的线程数,那么您肯定知道他们已经完成了这项工作。
messagesReceived
但是,根据您对套接字的实现,可能需要允许它们访问增加计数器变量的公共mutator方法。