线程主要通过共享对字段和对象引用字段的访问来进行通信。这种通信形式非常高效,但会导致两种错误:线程干扰和内存一致性错误。需要一些同步结构来防止这些错误。以下示例显示了我们需要同步的情况。
方法同步
同步方法启用了防止线程干扰和内存一致性错误的简单策略。如果一个对象对多个线程可见,则对该对象字段的所有读取或写入都通过同步方法完成。
同步方法的两次调用不可能交错。如果一个线程正在执行同步方法,则在同一对象上调用同步方法的所有其他线程将不得不等到第一个线程完成该对象。
示例:这表明是否有多个线程在没有同步的情况下访问 getLine() 方法。
// Example illustrates multiple threads are executing
// on the same Object at same time without synchronization.
import java.io.*;
class Line
{
// if multiple threads(trains) will try to
// access this unsynchroni