小编Ale*_*rum的帖子

Java发送消息线程

我用 Java 编写了一个游戏,其中包含使用套接字和数据输入/输出流的客户端和服务器端。服务器端有时需要在“for”循环中向所有用户发送消息,但由于写入套接字可能会阻塞,因此我为每个向他发送消息的用户创建了一个线程(以及为每个监听的用户创建了另一个线程)传入消息)。发送线程是基于这个想法构建的:

private ArrayList<Object> messages = new ArrayList<Object>(),
                          newMessages = new ArrayList<Object>();

public void run() {
    while (true) {
        for (Object message: messages) {
            try {
                if (message instanceof Byte)
                    out.writeByte((Byte)message);
                else if (message instanceof Boolean)
                    out.writeBoolean((Boolean)message);
                else if (message instanceof String)
                    out.writeUTF((String)message);
                else if (message instanceof Integer)
                    out.writeInt((Integer)message);
                else if (message instanceof Long)
                    out.writeLong((Long)message);
            } catch (IOException e) {}
        }
        synchronized (newMessages) {
            messages.clear();
            messages.addAll(newMessages);
            newMessages.clear();
        }
    }
}

public void write(Object message) {
    synchronized (newMessages) {
        newMessages.add(message); …
Run Code Online (Sandbox Code Playgroud)

java sockets multithreading dataoutputstream

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

dataoutputstream ×1

java ×1

multithreading ×1

sockets ×1