繁体   English   中英

Java同步写块

[英]Java Synchronized Write Block

我是Java的新手,我对同步有疑问。

我有以下代码可用于写入网络(目前为简单实现):

public void networkSendData(byte[] data){

    try {

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

    } catch (IOException e) {


    }
}

我想知道是否需要块级同步,因为我正在一次写入整个数据。 还是有种族状况的机会? 我问,因为要写入的数据来自多个来源。

谢谢。

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

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

public synchronized void networkSendData(byte[] data)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM