对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑的问题整体。不然就会出现数据不一致的错误。
示例:
/** * 业务整体需要完整的synchronized,保证业务的原子性 * @author Vision_TXG * */ public class MyThread04 { private String username ="txgang"; private String password = "123456"; public synchronized void setValue(String username,String password) { this.username = username; try { Thread.sleep(2000); }catch(Exception e){ e.printStackTrace(); } this.password = password; System.out.println("setvalue最终结果:username = " + username +" password = " + password); } /** * 该方法如果不加synchronizd,也就是异步操作,即上面setValue()方法没有执行完之前就可以执行该方法, * 导致得到的值不准确 */ public /*synchronized*/ void getValue() { System.out.println("getValue方法得到:username = " + username + " password = " + password); } public static void main(String[] args) throws InterruptedException { final MyThread04 m = new MyThread04(); Thread t1 = new Thread(new Runnable() {
@Override public void run() { // TODO Auto-generated method stub m.setValue("aaaa", "11111"); } }); t1.start(); Thread.sleep(1000); m.getValue(); } } |
数据库中的四个特性:A(原子性) ,C(一致性),I(隔离性),D(永久性)
四个特性都围绕着一致性而存在的。