我不能将 Thread.sleep() 放入我的 Class extends Runnable

I Cant Put Thread.sleep() in my Class extends Runnable

我使用套接字在 android 和 wifi 之间进行通信 return 当我尝试在发送数据后 3 秒断开连接时出现内存不足错误

我有一个接口来处理数据:

public interface SocketConnections {

    public void onSocketConnectionChanged(boolean isConnected, Socket socket);

    public void onMessageRecieved(String Message);

    public void onMessageSent();
}

套接字类

public class connectSocket implements Runnable {

    public Socket socket;
    private DataOutputStream out;
    private InputStream in;
    private SocketConnections connections;
    private static final String TAG = "connectSocket";

    public connectSocket(SocketConnections connections) {
        this.connections = connections;
    }

    @Override
    public void run() {
        connect();
    }

    private void connect() {
        disconnect();
        try {
            try {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000);
                            socket = new Socket(wsConfig.HOST_ADDRESS, wsConfig.PORT_NUMBER);
                            socket.setTcpNoDelay(true);
                            socket.setKeepAlive(true);
                            if (socket.isConnected()) {
                                connections.onSocketConnectionChanged(true, socket);
                                Log.i(TAG, "Connected");
                                while (socket.isConnected()) {
                                    out = new DataOutputStream(socket.getOutputStream());
                                    in = socket.getInputStream();
                                    String S;

                                    if (in != null) {
                                        while (true) {
                                            byte[] content = new byte[1024];
                                            try {
                                                Thread.sleep(2000);
                                                int bytesRead = in.read(content);
                                                if (bytesRead == -1) {
                                                    break;
                                                }
                                                byte[] x = Arrays.copyOfRange(content, 0, bytesRead);
                                                Log.i(TAG, "run: " + x.length);
                                                S = Util.fromByteArrayToHexString(x);
                                                connections.onMessageRecieved(S);
                                            } catch (Exception e) {
                                            }
                                        }
                                    }
                                }
                            }
                        } catch (Exception e) {
                            connections.onSocketConnectionChanged(false, socket);
                            e.printStackTrace();
                        }
                    }
                }).start();
            } catch (Exception ignored) {
            }
        } catch (Exception ignored) {
        }
    }

    public void sendData(final byte[] S) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(100);
                    out.write(S);
                    out.flush();
                    connections.onMessageSent();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        };
        Thread thread = new Thread(runnable);
        thread.start();
    }

    public void disconnect() {
        if (socket != null && socket.isConnected()) {
            try {
                socket.close();
                connections.onSocketConnectionChanged(false, socket);
//                Toast.makeText(G.context, "سیستم به سرور متصل نیست.", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

我想在发送数据和断开连接后添加 3 秒延迟 像这样

 public void sendData(final byte[] S) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(100);
                    out.write(S);
                    out.flush();
                    connections.onMessageSent();
                    Thread.sleep(3000);
                    disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        };
        Thread thread = new Thread(runnable);
        thread.start();
    }

它的 return 我内存不足错误并强制关闭我该怎么办?

好的,所以我找到了我的问题并解决了它。我不确定,但我想当我试图让线程在其他线程中休眠时,它会如何在开始前自行停止,或者我不知道那里发生了什么,但是当我将睡眠置于其他方法中并调用它时我的第一个线程工作正常。如果有人知道请告诉我们