我刚开始学习 Java,但遇到了这个问题:我有一个无限的 while 循环,它创建了一个通过套接字发送的消息;当前,直到从队列中轮询多个元素并读取它们之前,才会发送消息。String msg = null;String toSend = "";String currentNumOfMsg = 0;String MAX_MSG_TO_SEND = 200;while(true) { if ((msg = messageQueue.poll()) != null) { // if there is an element in the list toSend += (msg + "#"); currentNumOfMsg++; if (currentNumOfMsg == MAX_MSG_TO_SEND) { try { sendMessage(toSend); // send to socket } finally { msg = null; toSend = ""; currentNumOfMsg = 0; } } }}我的目标是在 N 秒后发送消息,而不是等待到达 MAX_MSG_TO_SEND ......是否可以这样做,或者我将继续使用这种方法?
2 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
而对方的回答是完全有效的,我认为这可能是有价值的告诉你,ScheduledExecutorService(文件发现这里),让你调用一个函数foo()每次n使用该方法秒scheduleAtFixedRate()。
基本上,实际设置执行器非常简单:
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
ses.scheduleAtFixedRate(foo, 0, n, TimeUnit.SECONDS);
我认为在此处放置更多代码有点不必要,但要了解如何更详细地执行此操作,请查看此处、此处或此处。这些链接给出了一些基本的例子。我真的建议这样做,因为这个类是 java util 库的一部分(因此没有额外的依赖项)并且您实际上不必非常担心它的多线程/调度部分,它会处理所有这些为你。但这只是我的 $.02。
如果您有问题/评论,请留下问题/评论,我会尽力回答。
添加回答
举报
0/150
提交
取消