MSDN文档说明实例方法,其中包括Stream。写,流类不能保证是线程安全的,但这是什么意思?如果一个线程试图调用Stream会发生什么?在其他线程没有从同一对象上的相同方法返回之前写一个流对象?是否会抛出异常,或者对象将根据线程的顺序将数据排队发送?有人说不使用锁定机制也可以调用。有人能解释一下吗?
这意味着你永远不应该同时从不同的线程在同一个Stream实例上调用实例方法,比如Read和Write。你会得到意想不到的行为。在某些情况下,可能会抛出异常,在其他情况下,您的数据可能会损坏,在其他情况下,它甚至可能工作(如果您足够幸运)。
Write是一个抽象方法,这意味着该方法的行为定义在Stream的子类中。Stream的一些子类可以提供线程安全的Write方法,而另一些则不能。因此,如果你同时从不同的线程调用它的Write方法,你不能说Stream将如何表现,除非你知道你正在处理的特定Thread子类。
所以你应该在处理流对象时使用锁,因为MSDN说流的方法不能保证线程安全,所以可能有流在并发调用时中断。
但是如果你显式地使用特定的Stream的子类,并且你知道它是线程安全的,那么就不需要锁了。