Java 取消阻止UDP线程

Java 取消阻止UDP线程,java,multithreading,sockets,Java,Multithreading,Sockets,我有一个可运行的接收器,我想停下来。但由于它是一个不断接收套接字,所以它的线程处于阻塞模式 我发现我必须使用socket.close()从线程本身的外部停止套接字 所以我定义了一个公共静态套接字。(我想这本身是不好的?)然后我开始新的线程,并尝试用这段代码停止它们(没有改变任何东西) 分别启动每根线可以很好地工作。但由于插座现在是全球性的,我无法单独阻止它们。如何使套接字变量成为全局变量而不是单个变量?或者我需要什么来实现这一点 public void startSls () throws S

我有一个可运行的接收器,我想停下来。但由于它是一个不断接收套接字,所以它的线程处于阻塞模式

我发现我必须使用socket.close()从线程本身的外部停止套接字

所以我定义了一个公共静态套接字。(我想这本身是不好的?)然后我开始新的线程,并尝试用这段代码停止它们(没有改变任何东西)

分别启动每根线可以很好地工作。但由于插座现在是全球性的,我无法单独阻止它们。如何使套接字变量成为全局变量而不是单个变量?或者我需要什么来实现这一点

 public void startSls () throws SocketException{
        try{
            socket = new DatagramSocket(parseInt(port));
        }catch (SocketException e) {
            Log.e("CCSstream", e.toString());
        }
        slst = new Thread(new slss(port));
        slst.start();
    }

    public void stopSls(){
        socket.close();
        stopSLS = true;
        slst.interrupt();
        runThreads1 = false;
    }
如果有什么不清楚的地方,我可以解释


谢谢

如果您有多个套接字,就不会保留单个
套接字
变量。我真的希望您在开始网络编程之前熟悉
列表
地图
和其他
集合
。你知道,在你跑之前先学会走路,否则你会摔倒摔碎你的脸。这正是我要问的。我对java有点陌生,所以需要稍微习惯一切都可以存储在地图中。将我的用户对象存储在映射中,其中线程位于用户类下。所以这并不完全陌生。现在我只需要让用户类按照您所说的列出单独的套接字。@Kayaman,前几天在这里的评论中也问我如何存储变量,如etc socket,使它们像“动态”或这里所说的那样,一些人说他们无论如何都不能被这样对待。但是如果列表是实现这一点的方法,我将尝试:)您可以声明套接字的静态映射,使用名称或数字作为键,然后获取/停止必要的sockety映射中的键是端口。如果使用数据查找,则“数据”必须包含事先添加到映射中的端口号。
 public void startSls () throws SocketException{
        try{
            socket = new DatagramSocket(parseInt(port));
        }catch (SocketException e) {
            Log.e("CCSstream", e.toString());
        }
        slst = new Thread(new slss(port));
        slst.start();
    }

    public void stopSls(){
        socket.close();
        stopSLS = true;
        slst.interrupt();
        runThreads1 = false;
    }