Java多线程之对写业务加锁,对读业务不加锁,会产生脏读

Posted 尘世间迷茫的小书童

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程之对写业务加锁,对读业务不加锁,会产生脏读相关的知识,希望对你有一定的参考价值。

 1 import java.util.concurrent.TimeUnit;
 2 
 3 /**
 4  * 对写业务加锁
 5  * 对读业务不加锁
 6  * 脏读
 7  */
 8 public class Account {
 9 
10     String name;
11     double balance;
12 
13     public synchronized void set(String name, double balance) {
14         this.name = name;
15         try {
16             Thread.sleep(2000); //写线程休眠两秒
17         } catch (InterruptedException e) {
18             e.printStackTrace();
19         }
20         this.balance = balance;
21     }
22 
23     /**
24      * 解决脏读在方法上加synchronized
25      * @param name
26      * @return
27      */
28     public /*synchronized*/ double getBalance(String name) {
29         return this.balance;
30     }
31 
32     public static void main(String[] args) {
33 
34         Account account = new Account();
35         new Thread(() -> account.set("张三", 100.0)).start();
36 
37         try {
38             TimeUnit.SECONDS.sleep(1); //读线程休眠一秒
39         } catch (InterruptedException e) {
40             e.printStackTrace();
41         }
42 
43         System.out.println(account.getBalance("张三"));
44 
45         try {
46             TimeUnit.SECONDS.sleep(2); //读线程休眠两秒
47         } catch (InterruptedException e) {
48             e.printStackTrace();
49         }
50 
51         System.out.println(account.getBalance("张三"));
52 
53     }
54 
55 }

 

以上是关于Java多线程之对写业务加锁,对读业务不加锁,会产生脏读的主要内容,如果未能解决你的问题,请参考以下文章

多线程加锁#yyds干货盘点#

Day624.并发编程代码加锁注意点 -Java业务开发常见错误

带你整理面试过程中关于多线程的编程问题

java核心-多线程- 并发原子类

java多线程知识汇总如何选择锁?如何加锁

int a; 一个线程写a,另一线程读a,如果不加锁,果然出现写了一半,读了一半的情况!