线程同步小结(2)
??
?? ? ? ? ?(一) ? ? ?为什么要用到Synchronized同步机制呢?
?? ? ?线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。当用多个线程对象访问一个共享数据的时候,会由于对线程的控制不加控制而导致出现不合理的情况。
?? ? ? 例如:两个线程ThreadA、ThreadB 都操作同一个对象Data 对象,并修改Data对象上的数据。?
???运行结果是:
?? ?这样的运行结果是:
public synchronized int plus(int y){x = this.x + y;return x;}?? 运行结果同上!
???
?? ? ? ? ? ? ? ? ? ? ? (三)那么何时需要同步呢?
?? ? ? ?1. 在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两个线程不会同时修改更改它。
?? ? ? ?2.对于非静态字段中可更改的数据,通常使用非静态方法访问。
?? ? ? ?3.对于静态字段中可更改的数据,通常使用静态方法访问。
?? ? ? ?4.如果需要在非静态方法中使用静态字段,或者在静态字段中调用非静态方法,问题将变得非常复杂。留在后边解决。
?? ? ? ? ?注意:用线程同步必须搞清楚synchronized锁定的是哪个对象!