• 多线程4---对象锁--脏读


    1.

     1 public class DirtyRead {
     2     private String username = "ck";
     3     private String password = "123";
     4     
     5     public  synchronized void setValue(String username, String password){
     6         this.username = username;
     7         try {
     8             System.out.println("线程:"+Thread.currentThread().getName()+"===>>>正在setvalue");
     9             Thread.sleep(2000);
    10         } catch (InterruptedException e) {
    11             e.printStackTrace();
    12         }
    13         this.password = password;
    14         System.out.println("线程:"+Thread.currentThread().getName()+"===>>>setvalue最终结果:username="+username+"; password:"+password );
    15     }
    16     
    17     public  synchronized void getValue(){
    18         System.out.println("线程:"+Thread.currentThread().getName()+"===>>>getValue最终结果:usrname:"+username+";password:"+password);
    19     }
    20     
    21     public static void main(String[] args) throws Exception {
    22         final DirtyRead dirtyRead = new DirtyRead();
    23         Thread t1 = new Thread(new Runnable() {
    24             @Override
    25             public void run() {
    26                 dirtyRead.setValue("ckang", "456"); //对象锁dirtyRead
    27             }
    28         }, "t1");
    29         t1.start();
    30         
    31         Thread.sleep(1000);
    32         dirtyRead.getValue();
    33     }
    34     /*
    35      如果setValue和getValue方法不加sychronized, t1休息2s的时候被main抢了cpu.
    36      线程:t1===>>>正在setvalue
    37     线程:main===>>>getValue最终结果:usrname:ckang;password:123
    38     线程:t1===>>>setvalue最终结果:username=ckang; password:456 
    39     
    40     如果set/get方法加了synchronized, 谁抢到cpu必须等执行完释放锁,才会切换到另外一个线程
    41     线程:t1===>>>正在setvalue
    42     线程:t1===>>>setvalue最终结果:username=ckang; password:456 
    43     线程:main===>>>getValue最终结果:usrname:ckang;password:456
    44      */
    45 }
    View Code
  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/bravolove/p/7944255.html
Copyright © 2020-2023  润新知