我正在为聊天客户端-服务器应用程序编写一个测试,我创建了10个套接字-each其中一个套接字向另一个9个套接字发送消息,这会触发服务器通过ExecutorService创建10个线程并发送messages.It所有10*9=90消息都需要一些时间才能发送,但是我如何验证所有10个线程都已完成此任务(线程没有终止,它们继续运行).I想知道是否有可能从套接字接收的线路总数并等待该条件,直到每个套接字达到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();
}
}发布于 2018-04-13 04:09:24
这是一个非常特殊的问题,但是根据您提供的信息,使用volatile变量可能是值得的。
public static volatile int messagesReceived = 0;关键字volatile的使用意味着JVM使用lock来确保一次只有一个线程可以修改变量。
然后,每个套接字都应该在完成作业后递增此messagesReceived变量。一旦messagesReceived变量达到10,或者您产生的线程数,您就可以确定它们都已经完成了这项工作。
//Your initialization here.
while (messagesReceived < threadCount){
Thread.wait(100);
}
//All threads have done the job.但是,根据您对套接字的实现,可能需要允许它们访问递增计数器变量的公共赋值函数方法。
https://stackoverflow.com/questions/49804311
复制相似问题