我剛開始學習 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
提交
取消