`

线程同步之脏读问题

阅读更多
  • 线程同步,要确保业务完整性(原子性),多个方法都要使用synchronized,否则会出现脏读问题

  demo:

 

  

package com.zan;
/**
 *  保持业务整体完整,都要使用synchronized,来确保原子性
 */
public class DirtyRead {

	private String username = "lisi";
	private String password = "123456";
	
	public synchronized void setValue(String username, String password){
		this.username = username;
		try {
			
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		this.password = password;
		
		System.out.println("setValue的值username = " + username + " , password = " + password);
	}
	
	//加synchronized ,确保在设值过程中,不会出现脏读。即要设值后才能去读
	public synchronized void getValue(){
		System.out.println("getValue的值username = " + this.username + " , password = " + this.password);
	}
	
	
	public static void main(String[] args) throws Exception{
		
		final DirtyRead dr = new DirtyRead();
		Thread t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				dr.setValue("wangwu", "new123456");		
			}
		});
		t1.start();
		
		Thread.sleep(1000);
		
		dr.getValue();
	}
	
	
	
}

 

0
0
分享到:
评论
1 楼 jstl1point0 2018-09-10  
可以不错,保持同步的基本办法;

相关推荐

    Servlet线程同步计数器实验

    这将展示并发访问共享资源时可能出现的问题,如丢失更新、脏读等。 3. **引入线程同步**:然后,在Servlet的service()方法或doGet()、doPost()等方法中使用synchronized关键字,将计数器的增操作封装在同步块内,...

    操作系统的线程同步实验报告完整版

    当一个变量被声明为volatile时,它的修改会立即通知其他线程,避免了因缓存导致的脏读问题。然而,volatile并不能保证原子性,因此仅适用于单次读写操作。 实验中还使用了LinkedBlockingQueue,这是一个基于链表...

    27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义

    然而,多线程环境下也会带来一系列问题,如数据不一致性、资源竞争等,因此,理解线程安全、线程同步以及等待唤醒机制至关重要。此外,单例设计模式在确保一个类只有一个实例的同时,提供了全局访问点,也是多线程...

    线程的同步(培训机构内部资料)

    线程同步的主要目标是确保数据的一致性和完整性,防止“脏读”、“不可重复读”和“幻读”等并发问题。 Java提供了多种线程同步机制,包括: 1. **synchronized 关键字**:这是Java中最基础的同步机制,可以用于...

    18.线程的同步机制-synchronized同步方法-脏读.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    ThreadSwitch_滴水_threadswitch_线程切换_

    线程不安全的代码可能导致数据竞争、脏读等问题。开发人员应确保对共享资源的操作是线程安全的。 10. **性能优化**:过度的线程切换会降低系统效率,因此合理设计线程数量、有效利用线程池、减少不必要的同步开销是...

    Java多线程synchronized同步方法详解

    2. **脏读(Dirty Read)问题** 脏读是指在一个线程修改数据后,另一个线程在数据未被提交时读取到了不一致的数据。在上述`DirtyReadTest`示例中,由于`setValue`方法是`synchronized`的,确保了线程安全,但`...

    java 线程之对象的同步和异步(实例讲解)

    在 Java 编程中,线程同步和异步是一种重要的机制,用于控制多线程环境下的资源访问和数据的一致性问题。下面,我们将通过实例讲解来详细介绍 Java 线程之对象的同步和异步。 一、多线程环境下的同步与异步 在多...

    J2ME的多线程教程和测试

    共享数据的访问需要同步,避免脏读和不可重复读。此外,避免死锁(两个或更多线程相互等待对方释放资源而无法继续执行)也很关键。 七、示例 在`aThreadTest`这个示例中,很可能是创建了一个线程类,模拟了多线程...

    多线程模型

    需要确保每个线程的事务独立,并避免脏读、不可重复读和幻读等问题。可以采用各种事务隔离级别,如读未提交、读已提交、可重复读和串行化。 5. **锁和同步机制**:在访问共享资源(如数据库连接)时,需要使用锁或...

    java线程api学习文档

    - `volatile`关键字:确保多线程环境下变量的可见性和有序性,防止数据的脏读。 5. **高级并发工具**: - `ExecutorService`和`ThreadPoolExecutor`: 提供线程池管理,可以有效地重用已创建的线程,减少创建和...

    java 多线程数据库操作

    - **事务管理**:多线程可能会引发并发控制问题,比如脏读、不可重复读和幻读。使用数据库提供的事务机制(如ACID属性)和隔离级别可以避免这些问题。 - **数据库连接管理**:由于数据库连接是有限的资源,应使用...

    Java多线程设计

    另外,`volatile`关键字确保变量在多线程环境下的可见性,防止线程间的脏读问题。 `java.util.concurrent`包提供了更高级的线程管理和同步工具,如`Semaphore`(信号量)、`CyclicBarrier`(循环屏障)、`...

    java线程入门,java线程入门

    - **volatile关键字**:保证共享变量的可见性和有序性,避免线程间的脏读。 - **Lock接口与ReentrantLock**:提供比synchronized更灵活的锁机制,支持公平锁、非公平锁以及可重入锁。 5. **线程通信**: - **...

    多线程对数据库操作

    此外,如果多个线程需要访问同一份数据,应使用适当的同步策略,如`synchronized`关键字,避免脏读、不可重复读和幻读等并发问题。 **5. 端口配置** 在描述中提到要修改线程端口,这可能是指Java程序中用于监听...

    java_Thread.rar_java 多线程_java多线程

    在实际开发中,还需要考虑线程安全问题,例如避免脏读、幻读和不可重复读等并发问题。Java提供了一系列的并发工具类,如Atomic系列、ConcurrentHashMap、ConcurrentLinkedQueue等,帮助开发者编写高效、安全的多线程...

    Java并发理论,如何理解线程安全.docx

    JMM通过同步和可见性规则防止数据脏读和其他并发问题。 **多线程中的问题** 1. **数据可见性**:线程A更新的共享变量可能未及时写回主内存,线程B可能读取到旧值,造成脏读。 2. **重排序**:编译器和处理器为了...

    线程编程练习笔记

    2. volatile关键字:确保线程间的变量可见性,防止编译器优化导致的脏读问题。 3. yield return:在迭代器中使用,可以让其他线程有机会执行。 十、异步编程与Task类 .NET Framework 4.0引入了Task类,作为异步编程...

    VC多线程操作ORACLE数据库

    此外,事务管理也至关重要,通过设置合适的事务隔离级别,可以避免脏读、不可重复读和幻读等并发问题。 为了实现线程同步,VC++提供了多种同步机制,如临界区、事件、信号量等。例如,可以使用临界区来保护共享的...

Global site tag (gtag.js) - Google Analytics