Java同步写块

时间:2010-05-14 12:50:10

标签: java synchronized-block

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

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

public void networkSendData(byte[] data){

    try {

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

    } catch (IOException e) {


    }
}

我想知道是否需要块级同步,因为我正在立即写入整个数据。还是有竞争条件的机会?我问,因为要写的数据来自多个来源。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用您的示例,除非多个线程可以访问相同的synchronize变量,否则不需要out d块。

换句话说,如果你有多个线程同时调用networkSendData,你应该synchronize方法。你不希望有一个线程调用flush,而另一个线程是执行write方法的一半。

public synchronized void networkSendData(byte[] data)

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

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