【问题标题】:Java timeout since last received datagram自上次接收数据报以来的 Java 超时
【发布时间】:2015-04-17 07:49:24
【问题描述】:

我的主应用程序中有以下代码:

package acast;

import java.net.SocketException;
import java.util.concurrent.ConcurrentLinkedQueue;

public class ACast {

    private ConcurrentLinkedQueue<String> queue;

    public ACast() throws SocketException{
        queue = new ConcurrentLinkedQueue<String>();
        UDPServer srv = new UDPServer(4321);
        srv.addUDPacketListener(new UDPPacketListener() {
            @Override
            public void onPacketReceived(String packet) {
                ACast.this.queue.offer(packet);
            }
        });
        srv.start();
    }

    public static void main(String[] args) throws SocketException {
        try{
            new ACast();   
        }
        catch(SocketException e){
            //e.printStackTrace();
            System.out.println("Socket allready opened. Can't start application");
            System.exit(1);
        }
    }

}

我的 UDPServer 扩展 Thread 并在每次收到 UDP 数据报时调用 onPacketReceived。我希望我的主应用程序在每次配置的超时时间自上次接收到的数据报后执行一些操作。我想避免运行一个只检查超时的线程。我想在最后收到数据报的那一刻开始一个倒计时线程,并取消任何其他正在进行的超时线程(如果有)。有什么帮助吗?

【问题讨论】:

    标签: java multithreading udp server


    【解决方案1】:

    一个简单的解决方案是使用超时任务启动Timer,每次收到新的数据报时,取消当前正在运行的定时器并启动一个新的。

    【讨论】:

      【解决方案2】:

      我会完全失去异步性,并使用带有读取超时的阻塞 I/O。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 2018-07-05
        相关资源
        最近更新 更多