zoukankan      html  css  js  c++  java
  • 多线程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
  • 相关阅读:
    spring框架学习(五)整合JDBCTemplate
    spring框架学习(四)AOP思想
    spring框架学习(三)spring与junit整合测试
    spring框架学习(二)使用注解代替xml配置
    Java SpringMVC(1)搭建项目
    spring框架学习(一)入门
    Java MyBatis3(2) Mapper代理的开发方式
    Java MyBatis3(1)入门
    .NET LINQ 查询
    vim之vimrc配置文件
  • 原文地址:https://www.cnblogs.com/bravolove/p/7944255.html
Copyright © 2011-2022 走看看