首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从套接字接收的消息数

从套接字接收的消息数
EN

Stack Overflow用户
提问于 2018-04-13 03:17:50
回答 1查看 73关注 0票数 1

我正在为聊天客户端-服务器应用程序编写一个测试,我创建了10个套接字-each其中一个套接字向另一个9个套接字发送消息,这会触发服务器通过ExecutorService创建10个线程并发送messages.It所有10*9=90消息都需要一些时间才能发送,但是我如何验证所有10个线程都已完成此任务(线程没有终止,它们继续运行).I想知道是否有可能从套接字接收的线路总数并等待该条件,直到每个套接字达到9个接收到的消息。我也不应该修改客户端和聊天代码,但是我可以在测试中自由编写任何东西,下面是我如何创建10个套接字并将消息发送到启动的服务器:

代码语言:javascript
复制
  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();
        }
     }
EN

回答 1

Stack Overflow用户

发布于 2018-04-13 04:09:24

这是一个非常特殊的问题,但是根据您提供的信息,使用volatile变量可能是值得的。

代码语言:javascript
复制
public static volatile int messagesReceived = 0;

关键字volatile的使用意味着JVM使用lock来确保一次只有一个线程可以修改变量。

然后,每个套接字都应该在完成作业后递增此messagesReceived变量。一旦messagesReceived变量达到10,或者您产生的线程数,您就可以确定它们都已经完成了这项工作。

代码语言:javascript
复制
//Your initialization here.
while (messagesReceived < threadCount){
    Thread.wait(100);
}
//All threads have done the job.

但是,根据您对套接字的实现,可能需要允许它们访问递增计数器变量的公共赋值函数方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49804311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档