- 对于对象的同步和异步的方法,在设计程序的时候一定要考虑问题的整体性,不然会出现数据不一致的错误,经典的就是脏读。
- 在对对象加锁的时候,要考虑业务的整体性,及为setValue/getVaule方法同时加锁synchronized关键字,保证业务的原子性,不然会出现错误。
- public class DirtyRead {
- private String username = "fdfdf";
- private String password = "123456";
- public synchronized void setValue(String username, String password){
- this.username = username;
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- this.password = password;
- System.out.println("setValue最终结果:username = " + username + " , password = " + password);
- }
- public void getValue(){
- System.out.println("getValue方法得到:username = " + this.username + " , password = " + this.password);
- }
- public static void main(String[] args) throws Exception{
- final DirtyRead dr = new DirtyRead();
- Thread t1 = new Thread(new Runnable() {
- @Override
- public void run() {
- dr.setValue("z3", "456");
- }
- });
- t1.start();
- Thread.sleep(1000);
- dr.getValue();
- }
- }
- 输出结果:
- getValue方法得到:username = z3 , password = 123456
- setValue最终结果:username = z3 , password = 456
- public class DirtyRead {
- private String username = "fdfdf";
- private String password = "123456";
- public synchronized void setValue(String username, String password){
- this.username = username;
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- this.password = password;
- System.out.println("setValue最终结果:username = " + username + " , password = " + password);
- }
- 加上synchronized关键字
- public synchronized void getValue(){
- System.out.println("getValue方法得到:username = " + this.username + " , password = " + this.password);
- }
- public static void main(String[] args) throws Exception{
- final DirtyRead dr = new DirtyRead();
- Thread t1 = new Thread(new Runnable() {
- @Override
- public void run() {
- dr.setValue("z3", "456");
- }
- });
- t1.start();
- Thread.sleep(1000);
- dr.getValue();
- }
- }
- 输出结果:
- setValue最终结果:username = z3 , password = 456
- getValue方法得到:username = z3 , password = 456
4.脏读。
最新推荐文章于 2021-04-03 02:33:01 发布