我是Java的新手,我对同步有疑问。
我有以下代码可用于写入网络(目前为简单实现):
public void networkSendData(byte[] data){
try {
out.write(data);
out.flush();
} catch (IOException e) {
}
}
我想知道是否需要块级同步,因为我正在一次写入整个数据。还是有种族状况的机会?我问,因为要写入的数据来自多个来源。
谢谢。
最佳答案
在您的示例中,除非多个线程将有权访问相同的synchronize
变量,否则不必具有out
d块。
换句话说,如果有多个线程同时调用networkSendData
,则应synchronize
方法。您不希望一个线程调用flush
而另一个线程正在执行write
方法的一半。
public synchronized void networkSendData(byte[] data)
您还需要确保在
out
方法中可能存在另一个线程的同时,没有线程正在访问/修改networkSendData
变量的值。这取决于接收写入数据的服务器如何处理它。如果使用多个线程根据写入服务器的内容更新共享的可变变量,则需要实现线程安全性。