1

我是 java 新手,我有一个关于同步的问题。

我有以下用于写入网络的代码(现在是简单的实现):

public void networkSendData(byte[] data){

    try {

        out.write(data);
        out.flush();

    } catch (IOException e) {


    }
}

我想知道这里是否需要块级同步,因为我正在一次写入整个数据。还是有机会出现比赛条件?我问是因为要写入的数据来自多个来源。

谢谢你。

4

1 回答 1

1

synchronize在您的示例中,除非多个线程要访问同一个out变量,否则不需要有一个d 块。

换句话说,如果你有多个线程networkSendData同时调用,你应该synchronize使用该方法。您不想让一个线程调用flush,而另一个线程正在执行该write方法的一半。

public synchronized void networkSendData(byte[] data)

您还需要确保没有线程正在访问/修改out变量的值,而另一个线程可能在该networkSendData方法中。

这取决于接收写入数据的服务器如何处理它。如果使用多个线程根据写入服务器的内容更新共享可变变量,则需要实现线程安全。

于 2010-05-14T12:53:33.630 回答