从头认识多线程-2.15 解决由同步的synchronized (newobject()) 引起的脏读的方法

本文探讨了由于使用`synchronized (new Object())`导致的脏读问题及其解决思路。提出了两种方法:一是确保单线程单方法访问修改属性,二是尽量避免同时修改单一属性。通过代码示例展示了方法级同步和方法块同步的应用,以实现数据的一致性。
摘要由CSDN通过智能技术生成

这一章节我们来讨论一下解决由同步的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值