0

我有几个关于 Java 中的套接字编程的问题。

  1. 我有一个进程需要跨多个套接字连接发送一条消息。现在我有这个如下

    Socket[] connections; //Already initialized with all connections
    
    for i=0 to connections.length - 1
        Send Message across connection[i]; // a new PrintWriter linked to the output stream
    

    这和这个广播一样原子吗?或者在并发环境中是否有可能它们可能不会在几乎同一时刻全部发送?

  2. 在并发环境中,套接字连接(设置为 PrintWriter)的输出流是否已经相互排斥?比如说,两个线程想要同时写入 PrintWriter。如果在 PrintWriter 上没有明确的互斥,流的任何输出都会被弄乱吗?

4

1 回答 1

1

这和这个广播一样原子吗?或者在并发环境中是否有可能它们可能不会在几乎同一时刻全部发送?

不知道你在这里问什么。多个线程不能同时使用一个Socket对象。如果同时访问它,您将需要围绕套接字对象进行同步。

如果您询问是否所有消息都将由单个线程“同时”发送,那么答案是“视情况而定”。单个线程可以快速完成此操作,但如果任何发送操作因任何原因阻塞,则可能不会。这在很大程度上取决于消息的大小以及写入套接字的频率。

在并发环境中,套接字连接(设置为 PrintWriter)的输出流是否已经相互排斥?

如果你看PrintWriter代码,你可以看到所有的操作都是synchronized. 这意味着从 a 并发写入套接字PrintWriter应该没问题。例如:

public void println(int x) {
    synchronized (lock) {
        print(x);
        println();
    }
}
于 2012-10-04T21:21:47.507 回答