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
  • 相关阅读:
    黑苹果崩溃恢复
    黑苹果声音小解决方法
    idea plugin 进度条
    phpstorm 插件
    awesome mac
    webstorm vue eslint 自动修正配置
    Laravel/php 一些调试技巧
    php ZipArchive 压缩整个文件夹
    laravel 模型事件 updated 触发条件
    php 开启 opcache 之后 require、include 还会每次都重新加载文件吗?
  • 原文地址:https://www.cnblogs.com/bravolove/p/7944255.html
Copyright © 2011-2022 走看看