这一章节我们来讨论一下解决由同步的synchronized (newobject()) 引起的脏读的方法。
1.造成上面脏读的原因:多线程多方法同时访问并修改某个属性域
2.解决思路
顺着上面的原因,笔者提出两种不是方法的方法
(1)只能单线程单方法访问并修改某个属性域这样就保证了执行的顺序(也就是需要同步所有访问并修改的步骤)(缺点:性能低下,优点:数据的强一致性)
(2)在多线程多方法的情况下,只能够访问多个属性域,不能够同时访问并修改某一个单一的属性域(根本目的就是分开运算,但是,在生产环境中,的确很难把一个属性域分成2个来运算,所以,笔者更趋向于第一种方法)
3.代码清单
(1)第一个思路
package com.ray.deepintothread.ch02.topic_15;
/**
*
* @author RayLee
*
*/
public class SolutionOfDirtyRead {
public static void main(String[] args) throws InterruptedException {
MyService2 myService = new MyService2();
ThreadThree threadThree = new ThreadThree(myService);
Thread thread = new Thread(threadThree);
thread.start();
ThreadFour threadFour = ne